我有3個表:DROPDOWNLIST後在ASP.NET MVC3和Entity Framework模型
RateProfile
- RateProfileID
- 摘要名稱
率
- RateID
- RateProfileID
- PanelID
- 其他的東西,更新
面板
- PanelID
- PanelName
我有型號爲每個這些。我有一個使用RateProfile模型的編輯頁面。我顯示RateProfile的信息以及與之相關的所有匯率信息。這工作正常,我可以更新它。不過,我還添加了一個下拉菜單,以便我可以按PanelID過濾費率。我需要它回覆更改,以便它可以顯示過濾的費率。
我使用
@Html.DropDownList("PanelID", (SelectList)ViewData["PanelDropDown"], new { onchange = "$('#RateForm').submit()" })
我的下拉列表。每當它回發到我的HttpPost編輯方法,但它似乎缺少有關率導航屬性的所有信息。這很奇怪,因爲我認爲它會完全符合我在表單中輸入/提交按鈕的內容(它實際上將整個模型傳遞迴到我的HttpPost Edit操作並執行我想要的操作)。 panelID被正確地傳遞給我的HttpPost編輯方法,並轉到下一個視圖,但是當我嘗試查詢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();}
難道這是因爲,當你從下拉菜單中選擇你的帖子時,有些字段會使頁面無效,在你的代碼中這意味着你不添加費率,因此,當你嘗試查詢費率時你的其他看法,他們根本無效? –
@TheJonasPersson我不這麼認爲。如果我轉到頁面,只需單擊提交而不更改任何內容,它會提交罰款並返回相同的視圖,但如果通過更改下拉列表提交,模型不會傳遞到我的編輯操作,導航屬性保持不變,並且出現的新視圖無法查詢費率導航屬性,因此缺少所有編輯器字段。無論哪種方式,它應該什麼都不做,並返回當前視圖。 –