У меня проблема, возникающая в форме, которую я пытаюсь опубликовать. В сценарии, где форма не проверяется, я беру стандартный маршрут вызова ModelState.AddModelError()
, а затем возвращает результат просмотра.ASP.Net MVC ModelState/Html.TextBox postback issue
Дело в том, что HTML. * Помощники должны собирать опубликованное значение при рендеринге, и я замечаю, что мои текстовые поля ТОЛЬКО делают это, если я включаю их в список параметров действия обратной передачи, который должен не нужно видеть, поскольку в некоторых формах слишком много полей, чтобы их перечислить как параметры.
Мой код действия грубо:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name)
{
var dataDefinition = ...
// do some validation stuff
if (!ModelState.IsValid)
{
// manually set checkbox fields via ViewData seeing as this STILL doesn't work in MC 1.0 :P
// ...
return View(dataDefinition);
}
}
Теперь dataDefinition (которое является LINQ к SQL сущности) имеет поле MinVolume, обрабатывается в представлении этой линии:
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
Однако, когда представление отображается после неудачной проверки ModelState, значение, введенное в него на исходной странице, которую мы опубликовали, не сохраняется. UNLESS Я включаю его как параметр в метод обратной передачи. Буквально, я могу «решить проблему», делая это:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
По какой-то причине, что заставит значение поля должны быть сохранены. Мне это кажется глупым, потому что моя форма имеет больше значений, чем просто, и мне не нужно добавлять параметр только для этого поля.
Любые идеи?
Нет, указав нуль, предполагается, что для запроса значения должен использоваться существующий контекст модели. Задание MinVolume является явным и заставит использовать это значение вместо того, что было ранее представлено. –
Неверный. Задание MinVolume просматривает ViewDataDoctionary, а затем ModelStateDictionary для последующих сообщений. Поэтому, если Model.MinVolume говорит, что 5 из-за редактирования, то указание MinVolume поместит 5 в TextBox. Затем, если сообщение сделано (скажем, значение 3), но найдено недействительным, TextBox покажет 3 второй раз. Ты это пробовал? Обычно вы указываете null в представлении «Создать» или «Создать», чтобы исходная запись отображалась пустой в поле, а последующие сообщения сохраняли введенное значение. –
Это именно то, как я это делаю и каждый раз работаю. Я нигде не видел, что вам нужно указать null. Ссылка на то, где вы это видели, была бы хорошей. – sirrocco