Приставка UpdateModel - ASP.NET MVC - PullRequest
10 голосов
/ 07 декабря 2008

У меня проблемы с TryUpdateModel(). Мои поля формы имеют префикс, но я использую - в качестве разделителя, а не точку по умолчанию.

<input type="text" id="Record-Title" name="Record-Title" />

Когда я пытаюсь обновить модель, она не обновляется. Если я изменяю атрибут имени на Record.Title, он отлично работает, но это не то, что я хочу сделать.

bool success = TryUpdateModel(record, "Record");

Можно ли использовать пользовательский разделитель?

Ответы [ 4 ]

10 голосов
/ 08 декабря 2008

Еще одна вещь, на которую следует обратить внимание, это то, что префикс должен помочь отражению найти правильные поля для обновления. Например, если у меня есть собственный класс для моих ViewData, такой как:

public class Customer
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

public class MyCustomViewData
{
    public Customer Customer {get; set;}
    public Address Address {get; set;}
    public string Comment {get; set;}
}

и у меня есть текстовое поле на моей странице

<%= Html.TextBox("FirstName", ViewData.Model.Customer.FirstName) %>

или

<%= Html.TextBox("Customer.FirstName", ViewData.Model.Customer.FirstName) %>

вот что работает

public ActionResult Save (Formcollection form)
{
    MyCustomViewData model = GetModel(); // get our model data

    TryUpdateModel(model, form); // works for name="Customer.FirstName" only
    TryUpdateModel(model.Customer, form) // works for name="FirstName" only
    TryUpdateModel(model.Customer, "Customer", form); // works for name="Customer.FirstName" only
    TryUpdateModel(model, "Customer", form) // do not work

    ..snip..
}
3 голосов
/ 07 декабря 2008

Нет, если вы не внедрите свой собственный ModelBinder. Если вы посмотрите на исходный код DefaultModelBinder на www.codeplex.com / aspnet , вы увидите, что при указании префикса он создает имя путем объединения префикса, точки и имени собственности. К сожалению, метод в DefaultModelBinder, который делает это, является частной статической и поэтому не может быть переопределен в производном классе.

0 голосов
/ 22 мая 2010

это было плохое решение использовать период. Подчеркивание было бы лучше.

Это означает, что вы должны отдельно определить все свои идентификаторы.

есть. У текстового поля теперь есть Html.TextBox ("test.test", new {@ id = "test")

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

Есть причина не использовать. в качестве идентификатора / имени в HTML bcs это не стандартно. Например, сломается, если в цели есть точка.

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