ASP.NET MVC1 - Не все поля запроса возвращаются в Model ... (вопрос NOOB) - PullRequest
0 голосов
/ 23 января 2010

Я работаю над своим самым первым проектом ASP.NET MVC и вижу странное поведение при возврате данных из представления редактирования в действие моего контроллера.

Прямо сейчас у меня есть 3 текстовых поля на странице плюс одно скрытое для PKey. Все они корректно заполняются из данных представления, но когда я отправляю форму, в возвращенной модели отображаются только 2 из 3 полей. Однако все три поля правильно заполнены в объекте запроса.

Я, вероятно, не очень хорошо это объясняю, но вот некоторые подходящие фрагменты кода, которые, надеюсь, лучше объяснить:

    public ActionResult Edit(System.Guid Id)
    {

        SetBase sb = setBaseRepository.Get(Id);
        return View("Edit", sb );
    }
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(SetBase setBase)
    {
        //if (setBase.Title.Trim().Length == 0)
        //{
        //    ModelState.AddModelError("Title", "Title is required.");
        //}
        if (setBase.Year.Trim().Length == 0) 
        {
            ModelState.AddModelError("Year", "Year is required.");
        }
        if (!ModelState.IsValid)
        {
            return View("Edit", setBase);
        }
        setBaseRepository.SaveOrUpdate(setBase);
        return View();
    }

А вот «мясо» самого взгляда:

<viewdata model="CardTracker.Core.SetBase">
<content name="MainContent">
<% MvcForm form = Html.BeginForm("Edit", "SetBase", Model.Id); %>

<%=Html.ValidationSummary("Update was unsuccessful. Please correct the errors and try again.", new { class = "dataEntryError" })%>

<fieldset>
    <legend class="dataEntry">Edit Set Base</legend>   
<div>
!{Html.Hidden("Id")}
<label class="dataEntry" for="Title" >Title: </label> ${Html.TextBox("Title", Model.Title, new { class = "dataEntryLong" })}
<%=Html.ValidationMessage("Title", "***", new { class = "dataEntryError" })%>
</br>

<label class="dataEntry" for="Year">Year:</label>${Html.TextBox("Year", null, new { class = "dataEntryNumber" })}
<%=Html.ValidationMessage("Year", "***", new { class = "dataEntryError" })%>
</br>


</div>
<input type="submit" value="Update" class="button" /> 
</fieldset>
<% form.EndForm(); %>
</content>

Поля «Id» и «Year» возвращаются просто отлично, но «Title» всегда возвращается пустым. Я убедился, что все они написаны правильно везде.

Я уверен, что делаю что-то явно неправильное, но я этого не вижу. Многочисленные примеры, которые я изучал, не помогают, и большинство из них показывают функциональность «Добавить» вместо «Правка».

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 23 января 2010

Я начну перечислять то, что замечаю, пока, возможно, не наткнусь на то, что действительно поможет вам:

  1. Поле заголовка является единственным полем, которое фактически ссылается на модель. Ваше поле Year имеет нулевое значение для начального значения. Я не думаю, что это имеет значение, но это единственное отличие, которое я вижу.
  2. Просто пытаюсь найти здесь нечетные крайние случаи, поэтому я проверяю, действительно ли значение "SetBase" в выражении BeginForm ("Edit", "SetBase", Model.id) действительно вызывает контроллер? Это то же имя, что и у вашей модели, что, конечно, хорошо, но хотелось бы убедиться, что это имя контроллера.

... все выглядит хорошо, но, очевидно, что-то не так.

...