2011-09-26 16 views
7

Mam dziwny problem i frustruje mnie to przez ostatnie kilka godzin. Nie mogę znaleźć niczego powiązanego; być może nie jestem wystarczająco dokładny, ponieważ nie jestem pewien, jak poprawnie go sformułować, lub jest to dziwnie wyjątkowy problem.Ten obszar tekstowy o wartości zerowej

Istnieje formularz wypełniany przez użytkownika w celu zaktualizowania informacji o koncie, wszystko działa tak, jak powinno, z wyjątkiem jednego obszaru tekstowego. Ta część tekstu "(która jest powiązana z właściwością Comments z UserInfo) staje się pusta, gdy formularz zostanie POSTed. Właściwość Comments jest jedyną właściwością, która ma wartość NULL.

gdy występuje
a) nie istniejąca wartość, użytkownik wprowadza wartość, właściwość ma wartość null.
B) Istniejąca wartość, użytkownik robi/nie zmienia czegoś/niczego, właściwość ma wartość NULL.

Załączam tylko odpowiedni kod, aby zachować porządek i prostotę. Mam nadzieję, że to wystarczy.

Controller Operacje

public ActionResult Edit_Information(long id) 
{ 
    // Get user info from the database. 
    // Return the view with the user info from the DB etc. 
} 

[HttpPost] 
public ActionResult Edit_Information(long id, UserInfo userInfo) 
{ 
    if (!this.ModelState.IsValid) 
    { 
     // Invalid 
     return View(userInfo); 
    } 

    // Update the information in the DB. 

    // Redirect the user back to their account. 
} 

Razor widoku HTML

<div style="width: 700px; margin-left: auto; margin-right: auto; text-align: left"> 
@Html.ValidationMessageFor(x => x.Comments) 
</div> 
@Html.Partial("~/Views/Shared/_EditorSmiles.cshtml") 
@Html.TextAreaFor(x => x.Comments, new { @class = "EditorArea profile-comments" }) 

UserInfomodel

[Validator(typeof(UserInfoValidator))] 
public class UserInfo 
{ 
    public string Comments { get;set; } 
} 

Tak, używam FluentValidation na modelu. Usunąłem go, żeby sprawdzić, czy to była przyczyna, ale tak nie było.

miejsca Próbowałem

  • Na działania POST, Użyłem FormCollection formCollection zamiast UserInfo userInfo.
  • Zarzucił wyjątek w akcji POST, aby udowodnić, że wartość zostanie opublikowana.
  • Utworzono nową właściwość o innej nazwie.
  • Ręcznie nadał właściwość wartość przed zwróceniem widoku. Wartość ta stała się pusta po opublikowaniu.
  • Ręcznie przekazał właściwość wartość w akcji POST, aby udowodnić, że nie jest to DB ani SQL. To zadziałało.
  • Usunięto atrybut Fluent Validation z modelu (jak wspomniano powyżej).
  • Używany [Bind(Prefix = "")] przed UserInfo userInfo. To nic nie zmieniło.

To frustruje mnie do punktu, w którym muszę zapytać: co do cholery idzie? czy robię coś źle? Muszę coś przeoczyć. Na stronie znajduje się inny obszar tekstowy, który działa tak, jak powinien. To tylko obszar tekstowy dla Comments, który zawsze zwraca wartości null niezależnie od warunków.

+0

Wyjmij typ UserInfo - wystarczy podać parametr komentarza. Czy jest zaludniony? Czy komentarze w formularzu (i widzisz je w Fiddler)? –

+0

Gotowe. Komentarze istnieją w formularzu (przynajmniej zakładam, że tak). Wciąż jest zero. Nie znam się na Fiddler, w rzeczywistości nigdy o nim nie słyszałem. –

+1

Może to bardzo głupie pytanie, ale czy na pewno część "komentarze", którą tu zamieściłeś, jest zawarta w prawidłowym tagu formularza? A może masz na myśli kolizję nazwy? – Iridio

Odpowiedz

3

Forma była zawinięta tak:

Html.BeginWindow(); 
Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
<!-- other stuff goes in between here --> 
Html.EndForm(); 
Html.EndWindow(); 

Html.BeginWindow() generuje tabeli (a okien), który jest owinięty wokół formy. To oczywiście spowodowało, że część formularza nie została prawidłowo POSTEDOWANA.

zmienione na:

Html.BeginForm("edit_information", "user", FormMethod.Post, new { id = "profile" }); 
Html.BeginWindow(); 
<!-- other stuff goes in between here --> 
Html.EndWindow(); 
Html.EndForm(); 

Bam! Znowu zadziałało. To nigdy nie przyszło mi do głowy, tak jak zrobiłem to wcześniej bez żadnych problemów. Cieszę się, że to jest naprawione. Wszyscy popełniamy błędy.

Powiązane problemy