从视图到控制器c#MVC

时间:2016-11-01 01:34:55

标签: c# asp.net-mvc view controller viewmodel

我知道在SOF中有很多类似的问题,但是我已经查看了所有解决方案并尝试了它们,但是无法使它工作。

问题在于:我有一个控制器方法,它将Viewmodel传递给视图(强类型)。在View中,我在Webgrid中有一个文本框,这样每当它的值发生变化时,它就会回发到另一个控制器方法。问题是我无法在第二个控制器方法中检索我之前传递的Viewmodel数据。

以下是代码:

控制器操作方法1:

public ActionResult Index()
{
    PlanViewModel myPlan = new PlanViewModel();
    /*Do some stuff to populate myPlan object*/
    return View("PlanIndex", myPlan);
}

查看

@{
    ViewBag.Title = "PlanIndex";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@using myproject.ViewModels
@model myproject.ViewModels.PlanViewModel

@using (Html.BeginForm("UpdateUnits", "Plan", FormMethod.Post))
{
    var grid = new WebGrid(Model.snack, canSort: false, canPage: false);
    int rowNum = 0;
    <div>
        @grid.GetHtml(columns:
         grid.Columns
         (
             grid.Column("Sr", format: item => rowNum = rowNum + 1),
             grid.Column("Unit", format: item => Html.TextBox("FoodList[" + (rowNum - 1).ToString() + "].Unit", (object)item.unit, new { onchange = "submit();" })),
             grid.Column("Name", format: (item) => Html.TextBox("FoodList[" + (rowNum - 1).ToString() + "].Name", (object)item.name)),
             grid.Column("Serving", format: (item) => Html.TextBox("FoodList[" + (rowNum - 1).ToString() + "].Serving", (object)item.serving)),
             grid.Column("Serving Unit", format: (item) => Html.TextBox("FoodList[" + (rowNum - 1).ToString() + "].ServingUnit", (object)item.servingUnit)),
             grid.Column("Protein", format: (item) => Html.TextBox("FoodList[" + (rowNum - 1).ToString() + "].Protein", (object)item.protein))
         ), mode: WebGridPagerModes.Numeric)
    </div>
}

请注意,在上面的视图中,有一个“Unit”文本框,它在值更改时附加了回发。如果值更改,则调用UpdateUnits操作方法。

控制器操作方法2(UpdateUnits):

[HttpPost]
public ActionResult UpdateUnits(PlanViewModel model)
{
    int updatedUnit = model.unit;
    /*Some additional complex logic*/
    return View("PlanIndex", model);
}

在第二个控制器方法中,模型始终为null。每次用户更改文本框中的值时,我都不想一次又一次地重新填充完整模型。请注意,我的Viewmodel包含多个自定义类列表和其他int,float声明。

我觉得我遗失了一些基本的东西,但是对MVC不熟悉,我无法弄明白。

ViewModel类

    public class PlanViewModel
    {
        public List<Food> breakfast { get; set; }
        public List<Food> lunch { get; set; }
        public List<Food> snack { get; set; }
        public List<Food> dinner { get; set; }
        public Goal goal { get; set; }
        public int totalProtein { get; set; }
    }

0 个答案:

没有答案