не могу заставить Serialize HtmlHelper работать - PullRequest
0 голосов
/ 10 марта 2011

Я посмотрел на: http://weblogs.asp.net/shijuvarghese/archive/2010/03/06/persisting-model-state-in-asp-net-mvc-using-html-serialize.aspx

но когда я публикую страницу, модель (то есть человек) возвращается как ноль?

    [HttpPost]
    public ActionResult Edit([DeserializeAttribute]Person person, FormCollection formCollection)
    {

// в этой строке есть ошибка: TryUpdateModel (person, formCollection.ToValueProvider ());

        return View(person);

    }


    <% using (Html.BeginForm("Edit", "Home"))
   {%>
<%=Html.Serialize("person", Model)%>
<%=Html.EditorForModel() %>
<button type="submit">
    go</button>
<%
    }%>

 [Serializable]
public class Person
{
    public string name { get; set; }
    public string suburb { get; set; }
}

1 Ответ

0 голосов
/ 10 марта 2011

Почему вы пытаетесь связать человека из запроса, используя следующее:

TryUpdateModel(person, formCollection.ToValueProvider());

, когда вы явно знаете, что в запросе такого нет?Эта строка вызывает связующее звено модели и пытается прочитать его из значений запроса.Но в вашей форме у вас есть только одно скрытое поле.Таким образом, ваше действие должно выглядеть так:

[HttpPost]
public ActionResult Edit([DeserializeAttribute]Person person)
{
    // Do something with the person object that's passed as
    // action argument
    return View(person);
}

Также ваш сценарий выглядит странно.У вас есть представление, которое, похоже, строго типизировано для этого Person объекта, в котором вы используете Html.EditorForModel, что означает, что вы предлагаете пользователю возможность редактировать эти значения.Если вы сериализуете модель, вы получите старые значения в действии вашего контроллера.Этот атрибут полезен, только если вы хотите сохранить некоторую модель между несколькими запросами, но в форме нет соответствующих полей ввода, чтобы средство связывания модели по умолчанию могло восстановить экземпляр в действиях POST.

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