繁体   English   中英

从同一视图获取值后,从控制器的视图中传递值

[英]Passing values in a view from controller after getting those values from same view [closed]

我是MVC的新手。 我想从视图中获取“ fromDate”和“ ToDate”。 在同一视图中,我需要三个DropDownLists,它们是空的并且是隐藏的。

单击提交按钮后,这些DropDownLists应该可见,并根据选择的日期填充数据。

但是我在视图页面上收到“空引用”错误。

我的查看页面是

<h2>View Data in Database</h2>
<table><tr><td>
@using(Html.BeginForm("ViewPage1","Home"))
{
   <table><tr><td>From Date:</td>
              <td>@html.TextBoxFor(m=>m.FromDate,"{0:dd/MM/yyyy}")</td>
          </tr>
          <tr><td>To Date:</td>
              <td>@html.TextBoxFor(m=>m.ToDate,"{0:dd/MM/yyyy}")</td>
          </tr>
          <tr><td><input type="submit" Value="Show"></td>
              <td><input type="submit" Value="Show"></td>
          </tr>
   </table>
   <div id="ShowDropBoxes">
   <table>
        <tr><td>@Html.CheckBox("Production Order:", new{id="ck1"})</td>
            <td>@Html.DropDownlistFor(m=>m.ProdNo, Model.ProdOrdList, "Select Production Order")</td>
        </tr>
         <tr><td>@Html.CheckBox("Part Number:", new{id="ck2"})</td>
            <td>@Html.DropDownlistFor(m=>m.PartNo, Model.PartNoList, "Select Part Number")</td>
        </tr>
         <tr><td>@Html.CheckBox("Status:", new{id="ck3"})</td>
            <td>@Html.DropDownlistFor(m=>m.StatusTxt, Model.StatusList, "Select Status")</td>
        </tr>
   </table>
   </div>

我的模特是

  public class HomeModel
  {
      public DateTime FromDate {get; set; }
      public DateTime ToDate {get; set; }
      public string ProdNo {get; set; }
      public string PartNo {get; set; }
      public int status {get; set; }
      public System.Web.Mvc.SelectList ProdNoList {get; set; }
      public System.Web.Mvc.SelectList PartNoList {get; set; }
      public System.Web.Mvc.SelectList StatusList {get; set; }
  }

控制器是:-

  public class HomeController: Controller
  {
       Repository List_in_Repository = new Repository();

       public ActionResult ViewPage1()
       {
           return View();
       }
       [HttpPost]
       public ActionResult ViewPage(HomeModel model)
       {
             string fromdate = model.FromDate.Tostring("yyyyMMdd");
             string todate = model.ToDate.Tostring("yyyyMMdd");
             model.ProdNoList = new SelectList(List_in_Repository.GetProductionOrders(fromdate,todate));
             model.PartNoList= new SelectList(List_in_Repository.GetPartNumbers(fromdate,todate));
             model.StatusList = new SelectList(List_in_Repository.GetStatus(fromdate,todate));
            return View(model);
       }
   }

您的GET方法不会初始化ProdNoListPartNoListStatusList属性的SelectList ,因此当您尝试在@Html.DropDownlistFor(m => m.ProdNo, Model.ProdOrdList ...)访问它们时,将引发异常。

您的GET方法将需要使用空列表添加初始化它们(例如,使用Enumerable.Empty<T>()

目前尚不清楚您最初显示视图时如何“隐藏”下拉列表,但是您应该考虑视图模型属性说( bool DisplayDropDowns ,在返回视图之前在POST方法中将其设置为true 。然后可以检查视图值使用

@if(Model.DisplayDropDowns)
{
  .... // render dropdowns
}

这意味着SelectList不需要在GET方法中初始化,因为if块中的代码将永远不会执行。

还请注意,POST方法应包含return View(model);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM