нулевое значение во ViewModel - PullRequest
0 голосов
/ 24 ноября 2010

У меня есть ViewModel (StoreViewModel).Когда я получаю значение в VM из View в Controller (Post), какое-то значение равно null, только некоторое значение, отображаемое в View, не равно null

Помогите мне, плз

    public class StoreViewModel
    {
        public StoreViewModel() { }
        public Store Store { get; set; }
        public List<Member> Members { get; set; }
        public List<Order> Orders { get; set; }
        public List<AccountPayable> AccountsPayable { get; set; }
    }

Вотmy View

    <% using(Html.BeginForm()) {%>
    <div><%: Html.TextBoxFor(model => model.Store.Name) %></div>
    <div><%: Html.TextBoxFor(model => model.Store.State) %></div>
    <div><input type="submit" value="Submit" /></div>
    <% } %>

Я установил [HiddenInput (DisplayValue = false)] для столбцов в Entity Store, Member, Order, AccountPayable

+++

Вот мойконтроллер.(Я пытался использовать FormCollection, чтобы получить значение из View, но ... не удалось)

[HttpPost]
        public ActionResult Details(Finger finger, StoreViewModel storeVM)
        {
            //if (finger.roleName != "Administrator")
            //    return RedirectToAction("DisplayNotice", "Notice");
            storeVM.Store.Active = (CheckBoxHelpers.GetValue(storeVM.Store.Active)).ToString();
            if (ModelState.IsValid)
            {               
                storesRep.SaveStore(storeVM.Store, true);
            }
            else
            {
                return View(storeVM);
            }

            return RedirectToAction("List", "Stores");
        }

1 Ответ

1 голос
/ 25 ноября 2010

Вы должны убедиться, что значение действительно присутствует в запросе POST. Тот факт, что вы получаете null, является убедительным свидетельством того, что это не так. Вы можете использовать FireBug , чтобы точно узнать, какие значения отправляются на сервер.

Кроме того, из того, что я вижу, ваша форма содержит только названия магазинов и текстовые поля состояния, поэтому это единственные значения, которые вы можете ожидать получить в своем действии POST:

<% using(Html.BeginForm()) {%>
    <div><%: Html.TextBoxFor(model => model.Store.Name) %></div>
    <div><%: Html.TextBoxFor(model => model.Store.State) %></div>
    <div><input type="submit" value="Submit" /></div>
<% } %>

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

В вашем действии контроллера вы пытаетесь прочитать поле storeVM.Store.Active, поэтому включите это в вашей форме:

<%: Html.HiddenFieldFor(model => model.Store.Active) %>
...