Использование именованных параметров в качестве входных данных контроллера вместо FormCollection - PullRequest
3 голосов
/ 25 октября 2009

Я новичок в ASP.NET MVC, так что это может дать очевидный ответ. Прямо сейчас у меня есть форма с множеством элементов управления вводом, поэтому у меня есть действие, которое выглядит так:

public ActionResult MyAction(string formItemOne, int? formItemTwo, etc...)

У него около десятка параметров, что довольно уродливо. Я пытаюсь изменить это на это:

public ActionResult MyAction(FormCollection formItems)

и затем динамически анализировать элементы. Но когда я переключаюсь на FormCollection, элементы формы больше не «автоматически» запоминают свои значения с помощью обратных передач. Почему переход на FormCollection изменит это поведение? Что-нибудь простое, что я могу сделать, чтобы это снова заработало автоматически?

Спасибо за помощь,

~ Джастин

Ответы [ 3 ]

4 голосов
/ 25 октября 2009

Другое решение - использовать модели вместо манипулирования необработанными значениями. Как это:

class MyModel
{
  public string ItemOne { get; set; }
  public int? ItemTwo { get; set; }
}

Тогда используйте этот код:

public ActionResult MyAction(MyModel model)
{
  // Do things with model.

  return this.View(model);
}

На ваш взгляд:

<%@ Page Inherits="System.Web.Mvc.ViewPage<MyModel>" %>
<%= Html.TextBox("ItemOne", Model.ItemOne) %>
<%= Html.TextBox("ItemTwo", Model.ItemTwo) %>
1 голос
/ 25 октября 2009

Чтобы заменить большой список параметров одним, используйте модель просмотра . Если после POST вы вернете эту модель в ваше представление, то ваше представление запомнит опубликованные значения.

Модель представления - это просто класс с вашими параметрами действия в качестве открытых свойств. Например, вы можете сделать что-то вроде этого, заменив:

public ActionResult MyAction(string formItemOne, int? formItemTwo, etc...)

с

public ActionResult MyAction(FormItems formItems)
{
  //your code...
  return View(formItems);
}

, где FormItems

public class FormItems
{
  public property string formItemOne {get; set;}
  public property int? formItemTwo {get; set;}
}

Вы можете увидеть полный пример в посте Стивена Уолтера Совет ASP.NET MVC № 50 - Создание моделей представления .

0 голосов
/ 25 октября 2009

Возможно, потому что они больше не волшебным образом вставляются в словарь ModelState. Попробуйте вставить их туда.

Если вы используете UpdateModel () или TryUpdateModel (), я думаю, что значения будут сохранены.

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