asp.net-mvc2 - Сильно типизированные помощники, не использующие модель? - PullRequest
1 голос
/ 23 августа 2011

При использовании строго типизированных помощников в MVC2 значения поля ввода не берутся из свойства Model при создании сообщения. Это поведение по умолчанию?

(строго типизированный) вид со строго типизированными помощниками:

<div class="editor-label">
    <%: Html.LabelFor(model => model.Name) %>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.Name) %>
    <%: Html.ValidationMessageFor(model => model.Name) %>
</div>

<div class="editor-label">
    <%: Html.LabelFor(model => model.Price) %>
</div>
<div class="editor-field">
    <%: Html.TextBoxFor(model => model.Price) %>
    <%: Html.ValidationMessageFor(model => model.Price) %>
</div>

Действие контроллера для: / Product / Edit / 5

    public ActionResult Edit(int id)
    {
        var p = new Product();
        p.Name = "product 1";
        p.Price = "100";
        return View(p);
    }

Вывод HTML:

<div class="editor-label">
    <label for="Name">Name</label>
</div>

<div class="editor-field">
    <input id="Name" name="Name" type="text" value="product 1" />
</div>

<div class="editor-label">
    <label for="Price">Price</label>
</div>
<div class="editor-field">
    <input id="Price" name="Price" type="text" value="100" />
</div>

Действие контроллера для: / Product / Edit / 5

    [HttpPost]
    public ActionResult Edit(Product p)
    {
        p.Name = "prrrrrrd 2";
        return View(p);

    }

Вывод HTML после публикации формы (ниже я ожидаю, что значением ввода с id = "Name" будет "prrrrrrd 2. Откуда хелпер со строгим типом получает свое значение?):

<div class="editor-label">
    <label for="Name">Name</label>
</div>

<div class="editor-field">
    <input id="Name" name="Name" type="text" value="product 1" />
</div>

<div class="editor-label">
    <label for="Price">Price</label>
</div>
<div class="editor-field">
    <input id="Price" name="Price" type="text" value="100" />
</div>

1 Ответ

4 голосов
/ 23 августа 2011

При использовании строго типизированных помощников в MVC2 значения полей ввода не берутся из свойства Model при создании сообщения. Это поведение по умолчанию?

Да, они сначала берутся из ModelState, а затем из Model. Если вы намерены внести некоторые изменения в модель в своем действии POST, вам необходимо сначала удалить их из ModelState. Например:

[HttpPost]
public ActionResult Edit(Product p)
{
    ModelState.Remove("Name");
    p.Name = "prrrrrrd 2";
    return View(p);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...