【发布时间】:2018-01-07 18:07:22
【问题描述】:
我需要选择Quarter and Year 然后在提交时这两个值应该被传递给我的存储过程"SummaryProc" 并且在执行之后它将传递ID 的行.....如果我写的代码请指导我很好。我错过了链接,因为我无法理解如何链接所有这些。工作应用程序将是"Enter Quarter & Year in _Summary.cshtml -> Pass values to Controller -> Execution in Repository code -> rows returned from stored proc to be displayed in SummaryTable.cshtml"
_Summary.cshtml
<div class="form-group">
<label class="control-label col-lg-4">Period:</label>
<div class="col-lg-8">
@Html.DropDownList("Quarter", new SelectListItem[] { (new SelectListItem() { Text = "Q1", Value = "1" }), (new SelectListItem() { Text = "Q2", Value = "2" }), (new SelectListItem() { Text = "Q3", Value = "3" }), (new SelectListItem() { Text = "Q4", Value = "4" }) }, "--Select Quarter--", new { @class = "form-control", id = "Quarter" })
<br />
@Html.DropDownList("Year", new SelectListItem[] { (new SelectListItem() { Text = "2016", Value = "2016" }), (new SelectListItem() { Text = "2017", Value = "2017" }) }, "--Select Year--", new { @class = "form-control", id = "Year" })
</div>
</div>
<div class="row">
<div class="col-lg-offset-4" style="padding: 10px 0px 0px 0px;">
<input type="submit" id="submit" value="Submit" class="btn btn-lg btn-success" />
</div>
</div>
控制器代码:
[ActionName("_Summary")]
[HttpPost]
public ActionResult _Summary(FloorPlanViewModel model, FormCollection form)
{
SummaryConfiguration sumConfig = new SummaryConfiguration();
sumConfig.Quarter = Convert.ToInt32(form["Quarter"]);
sumConfig.Year = Convert.ToInt32(form["Year"]);
var details = floorService.SummaryProc(sumConfig.Quarter, sumConfig.Year);
return PartialView("SummaryTable", details);
}
执行存储过程的代码:
public IEnumerable<SummaryConfiguration> SummaryProc(int Quarter, int Year)
{
var model = new List<SummaryConfiguration>();
using (var dbCmd = defaultDB.GetStoredProcCommand("dbo.SummaryProc"))
{
defaultDB.AddInParameter(dbCmd, "Quarter", System.Data.DbType.Int32, Quarter);
defaultDB.AddInParameter(dbCmd, "Year", System.Data.DbType.Int32, Year);
var varCmd = defaultDB.ExecuteReader(dbCmd);
while (varCmd.Read())
{
// add items in the list
model.Add(new SummaryConfiguration()
{
ID = Convert.ToString(varCmd["ID"]),
//rest of the code
});
}
}
return model;
}
【问题讨论】:
-
如果要返回不同的视图,需要指定视图名称。但是为什么你不绑定到你的模型而不是使用像
Convert.ToInt32(form["Quarter"]这样的代码。如果您使用 ajax 发布选项值并使用表格的部分视图更新现有视图,您将获得更好的性能。 -
而您的
SummaryProc方法返回IEnumerable<SummaryConfiguration>,因此@foreach (var item in Model.sumConfig)毫无意义(IEnumerable<T>不包含任何属性)并且您的代码只会抛出this exception -
@StephenMuecke 所以我可以使用'@foreach(模型中的变量项)'吗?
-
是的,你可以(但是你没有在新视图中显示选定的选项,这不利于良好的用户界面)
-
在下一个视图中,我需要在表格中显示 lineid、项目等。我对代码做了一些更改..让我更新问题
标签: c# html asp.net-mvc model-view-controller