Расширить объект из ViewData в MVC HtmlHelpers - PullRequest
2 голосов
/ 21 сентября 2011

Я создаю форму ajax с помощью помощников MVC Ajax: http://msdn.microsoft.com/en-us/library/dd505013.aspx

Код выглядит примерно так:

Ajax.BeginForm("ActionName", "ControllerName",
    new {
            SomeProperty = (ViewData["SomeObject"] as SomeClass).SomeProperty,
            AnotherProperty = (ViewData["SomeObject"] as SomeClass).AnotherProperty,
            AllTheProperties = (ViewData["SomeObject"] as SomeClass).AllTheProperties,
            otherProperty= ViewData["otherObject"]
        },
  new AjaxOptions {},
  new {id = "anHtmlId"} );

но в ViewData["SomeObject"] есть еще много свойств.

Я хотел бы добавить ViewData["otherObject"] к объекту routeData просто с как можно меньшим количеством строк, и не хочу, чтобы все свойства someObject были представлены отдельно, чтобы я мог добавить свойства к нему без повторного посещения этот код в представлении.

По существу, "объединение" этих объектов для передачи в качестве параметра routeData было бы полезно.


Обновление: Идея:

Ajax.BeginForm("ActionName", "ControllerName",
    ViewData["SomeObject"].addThePropertiesOf(ViewData["otherObject"]),
  new AjaxOptions {},
  new {id = "anHtmlId"} );

Где addThePropertiesOf() возвращает новый объединенный объект. Я не хотел бы использовать дорогостоящие биты отражения, иначе это не кажется производительным.

1 Ответ

4 голосов
/ 21 сентября 2011

Какой смысл отправлять в HTML некоторые значения, которые не могут быть изменены пользователем, поскольку они не являются частью формы в качестве элементов ввода, просто чтобы отправить их обратно при обратной передаче в качестве параметров строки запроса? Не имеет смысла. Это полная трата пропускной способности. Для меня все, что вам нужно отправить на сервер, когда вы публикуете эту форму, это некоторый уникальный идентификатор (в дополнение, конечно, ко всем полям формы, которые пользователь может изменять):

Ajax.BeginForm(
    "ActionName", 
    "ControllerName", 
    new { id = (ViewData["SomeObject"] as SomeClass).Id }, 
    new AjaxOptions { }, 
    new { id = "anHtmlId"} 
)
{
    ... some input fields that the user can modify and
        that will automatically be sent to the server when
        the form is submitted
}

И, конечно, для всех значений, которые можно изменить, у вас будут соответствующие поля ввода, значения которых, очевидно, будут автоматически отправлены на сервер.

Наконец, на сервере используйте этот уникальный идентификатор для повторного получения исходных значений, откуда бы вы их ни извлекали в действии GET при визуализации формы. Вы взяли их откуда-то, верно, иначе вы бы не смогли сохранить их в ViewData.

И, пожалуйста, избавьтесь от этих ViewData/ViewBag, определите модели представлений и используйте строго типизированные представления. Я начинаю проявлять некоторую реальную аллергию на эти две слабо типизированные конструкции, которые никогда не должны использоваться ни в одном приложении ASP.NET MVC.

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