Значение «некоторое значение» недопустимо для проверки привязки модели asp.net - PullRequest
0 голосов
/ 09 июля 2011

Контроллеры:

    public ActionResult EditTest()
    {
        return View(new EditTestViewModel("Is this a test?"));
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditTest(EditTestViewModel test)
    {
        return View(new EditTestViewModel("Is this a test?"));
    }

ViewModel:

public class EditTestViewModel
{
    public String test { get; set; }

    public EditTestViewModel(String test)
    {
        this.test = test;
    }
}

Просмотр:

<% using (Html.BeginForm("EditTest", "Test", FormMethod.Post)) {%>
    <%= Html.ValidationSummary(true) %>
    <%= Html.TextBoxFor(model => model.test) %>
    <%= Html.ValidationMessageFor(model => model.test) %>
    <input type="submit" value="Save" />
<% } %>

Результат при нажатии кнопки сохранения (независимо от того, редактирую я данные или нет):

Значение "Это тест?"неверен.

Что происходит?

1 Ответ

0 голосов
/ 09 июля 2011

Первое исключение, которое вы получите, запустив этот код и отправив форму, будет следующим:

[MissingMethodException: No parameterless constructor defined for this object.]

Это потому, что EditTestViewModel не имеет конструктора без параметров, вы не можете использовать его таким образом.

Вторая проблема с вашим кодом заключается в том, что вы создаете новый объект в своем действии POST вместо повторного использования объекта, переданного в качестве аргумента.

Итак, как это исправить:

Просмотр модели:

public class EditTestViewModel
{
    public String test { get; set; }
}

Контроллер:

public ActionResult EditTest()
{
    var model = new EditTestViewModel
    {
        test = "Is this a test?"
    }
    return View(model);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
    return View(model);
}

И если по какой-то причине вы захотите отредактировать значение в действии POST и отразить его в представлении, вынеобходимо удалить его из состояния модели, иначе помощники HTML выберут старое значение:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
    model.test = "new value";
    ModelState.Remove("test");
    return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...