Это текстовая область нулевой - PullRequest
7 голосов
/ 26 сентября 2011

У меня странная проблема, и она меня расстраивает последние несколько часов. Я не могу найти что-то связанное; возможно, я недостаточно конкретен, так как не знаю, как правильно это сказать, или это странно уникальная проблема.

Существует форма, которую пользователь заполняет, чтобы обновить информацию своей учетной записи, все работает как надо, кроме одной текстовой области. Значение этой текстовой области (которое привязано к свойству Comments of UserInfo) становится нулевым после того, как форма отправлена. Свойство Comments является единственным свойством, которое имеет значение null.

Когда это происходит
A) Нет существующего значения, пользователь вводит значение, свойство равно нулю.
Б) Существующее значение, пользователь что-то / ничего не меняет / что-либо изменяет, свойство равно нулю

Я включу только соответствующий код, чтобы все было просто и понятно. Надеюсь, этого достаточно.

Действия контроллера

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 View 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" })

UserInfo Модель

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

Да, я использую FluentValidation на модели. Я удалил его, чтобы посмотреть, было ли это причиной, но это не так.

Вещи, которые я пробовал

  • В действии POST я использовал FormCollection formCollection вместо UserInfo userInfo.
  • Выдало исключение в действие POST, чтобы доказать, что значение становится нулевым при публикации.
  • Создано новое свойство с другим именем.
  • Вручную передали свойству значение перед возвратом представления. Значение стало нулевым, когда оно было опубликовано.
  • Вручную присвоили свойству значение в действии POST, чтобы доказать, что это не БД или SQL. Это сработало.
  • Удален атрибут Fluent Validation из модели (как сказано выше).
  • Используется [Bind(Prefix = "")] до UserInfo userInfo. Это ничего не изменило.

Это расстраивает меня до такой степени, что я должен спросить: что, черт возьми, происходит? Я делаю что-то неправильно? Я должен что-то упускать из виду. На странице есть еще одна текстовая область, которая работает как надо. Это просто текстовая область для Comments, которая всегда возвращает нулевые значения независимо от условий.

1 Ответ

3 голосов
/ 26 сентября 2011

Форма была обернута следующим образом:

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

Html.BeginWindow() создает таблицу (окно), которая оборачивается вокруг формы.Это, очевидно, привело к тому, что части формы не были правильно размещены.

Изменено на:

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

Бам!Это снова сработало.Это никогда не происходило со мной, как я делал это раньше без каких-либо проблем.Я рад, что это исправлено.Мы все совершаем ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...