我有 3 张桌子:
速率配置文件
- RateProfileID
- 个人资料名称
速度
- 费率ID
- RateProfileID
- 面板ID
- 其他要更新的东西
控制板
- 面板ID
- 面板名称
我有这些模型。我有一个使用 RateProfile 模型的编辑页面。我显示 RateProfile 的信息以及与之关联的所有 Rates。这很好用,我可以很好地更新它。但是,我还添加了一个下拉列表,以便我可以按 PanelID 过滤费率。我需要它来回发更改,以便它可以显示过滤后的费率。
我在用着
@Html.DropDownList("PanelID", (SelectList)ViewData["PanelDropDown"], new { onchange = "$('#RateForm').submit()" })
对于我的下拉列表。每当它回发到我的 HttpPost Edit 方法时,它似乎都缺少有关 Rates 导航属性的所有信息。这很奇怪,因为我认为它会完全按照我在表单中的输入/提交按钮所做的事情(实际上将整个模型传递回我的 HttpPost 编辑操作并执行我想要它执行的操作)。panelID 正确地传递给我的 HttpPost Edit 方法并传递到下一个视图,但是当我尝试查询 Model.Rates 导航属性时为空(仅当帖子来自下拉列表时。当帖子来自时一切正常我的提交输入)。
获取编辑:
public ActionResult Edit(int id, int panelID = 1)
{
RateProfile rateprofile = db.RateProfiles.Single(r => r.RateProfileID == id);
var panels = db.Panels;
ViewData["PanelDropDown"] = new SelectList(panels, "PanelID", "PanelName", panelID);
ViewBag.PanelID = panelID;
return View(rateprofile);
}
HttpPost 编辑:
[HttpPost]
public ActionResult Edit(RateProfile rateprofile, int panelID)
{
var panels = db.Panels;
ViewData["PanelDropDown"] = new SelectList(panels, "PanelID", "PanelName", panelID);
ViewBag.PanelID = panelID;
if (ModelState.IsValid)
{
db.Entry(rateprofile).State = EntityState.Modified;
foreach (Rate dimerate in rateprofile.Rates)
{
db.Entry(dimerate).State = EntityState.Modified;
}
db.SaveChanges();
return View(rateprofile);
}
return View(rateprofile);
}
看法:
@model PDR.Models.RateProfile
@using (Html.BeginForm(null,null,FormMethod.Post, new {id="RateForm"}))
{
<div>
@Html.Label("Panel")
@Html.DropDownList("PanelID", (SelectList)ViewData["PanelDropDown"], new { onchange = "$('#RateForm').submit()" })
</div>
@{var rates= Model.Rates.Where(a => a.PanelID == ViewBag.PanelID).OrderBy(a => a.minCount).ToList();}
@for (int i = 0; i < rates.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(modelItem => rates[i].RateProfileID)
@Html.HiddenFor(modelItem => rates[i].RateID)
@Html.HiddenFor(modelItem => rates[i].PanelID)
@Html.EditorFor(modelItem => rates[i].minCount)
@Html.ValidationMessageFor(model => rates[i].minCount)
</td>
<td>
@Html.EditorFor(modelItem => rates[i].maxCount)
@Html.ValidationMessageFor(model => rates[i].maxCount)
</td>
<td>
@Html.EditorFor(modelItem => rates[i].Amount)
@Html.ValidationMessageFor(model => rates[i].Amount)
</td>
</tr>
}
<input type="submit" value="Save" />
}
总结一下我的问题,我认为以下查询仅在帖子来自提交按钮时有效,而不是来自我的下拉列表时。
@{var rates= Model.Rates.Where(a => a.PanelID == ViewBag.PanelID).OrderBy(a => a.minCount).ToList();}