ViewModel не имеет свойств, установленных в Model с использованием метода HttpPost Create - PullRequest
0 голосов
/ 31 мая 2011

У меня есть простое приложение MVC3 с моделью EF4

Log
.Name
.CreatedDate
.LogTypeId

LogTypes
.Id
.Description

и ViewModel

LogViewModel
Log MyLog
List<SelectListItem> Options

LogViewModel(){
  Log = new Log();
}

Это отображается на моем экране правильно, и я могу редактировать / обновлять значения, отображать раскрывающийся список и устанавливать имя «MyTestValue».

Однако в методе HttpPost Create моего контроллера свойства для logVm.Log не установлены?

[HttpPost]
public ActionResult Create(LogViewModel logVm){
  logVm.Log.Name == "MyTestvalue"; //false - in fact its null
}

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

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

@model LogViewModel
@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.Log.Name)
        @Html.EditorFor(x => x.Log.Name)
    </div>

    <div>
        @Html.LabelFor(x => x.Log.SomeOtherProperty)
        @Html.EditorFor(x => x.Log.SomeOtherProperty)
    </div>

    ...

    <input type="submit" value="OK" />
}

, чтобы при отправке формы значения POSTed выглядели так:

Log.Name=foo&Log.SomeOtherProperty=bar

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

0 голосов
/ 01 июня 2011

Метод контроллера должен иметь свойство с именем модель

[HttpPost]
public ActionResult Create(LogViewModel **model**){
  **model**.Log.Name == "MyTestvalue"; //true    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...