Рендеринг представления MVC не учитывает данные, переданные в модели представления.

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

Однако мое представление MVC, по-видимому, объединяет данные как из опубликованной модели представления, так и из новой модели представления, созданной в результате запроса к базе данных. Когда представление просто отображает значения свойств из модели представления, оно правильно использует значения из переданного ему экземпляра модели представления, но когда оно привязывает элемент управления HTML-формы к свойству модели представления, оно использует значения из опубликованной модели представления. Это означает, что одно представление может отображать два разных значения для одного свойства в одном экземпляре модели представления:

введите здесь описание изображения

Вот очень упрощенная версия метода действия...

public ActionResult Index(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        // Write the posted model data to the repository
        // ...

        // Retrieve a new entity for the user to work on
        var alternate = new MyViewModel { Name = "New Name" };

        return View(alternate);
    }

    return View(model);
}

... и модель представления...

public class MyViewModel
{
    [Required]
    public string Name { get; set; }
}

... и вид, который использовался для создания приведенного выше изображения...

@model Mvc4TestApplication.ViewModels.MyViewModel

Name: @Model.Name
@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Name)
    @Html.TextBoxFor(model => model.Name)
    <input type="submit" value="Submit"/>
}

Кажется, я неправильно понял, как представления MVC обнаруживают данные своей модели. Есть ли какой-то альтернативный синтаксис, который я должен использовать, чтобы явно указать представлению, чтобы связать его элементы управления формой с переданной ему моделью представления?

Спасибо,

Тим.




Ответы (1)


Попробуйте очистить ModelState. htmlhelpers используют ModelState для получения значений.

ModelState.Clear();

Прежде чем вы вернете View()

person hkon    schedule 12.11.2012
comment
Отличный ответ. Спасибо за решение моей проблемы. - person Tim Coulter; 12.11.2012