[英]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方法不会初始化ProdNoList
, PartNoList
和StatusList
属性的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.