我已經來到智慧巫師理事會這裏在Stackoverflow,因爲我需要一些魔法(它似乎)來解決我的代碼的一個小問題。從下拉列表中獲取一個值mvc 4
我試圖從我的下拉列表中接收數據,我嘗試了很多法術......但是我感覺我的能力太弱了。我試圖從下拉列表中檢索數據會導致我的電腦嘔吐一些。因此,我希望你們的智慧(即使是一個字)能幫助我想出正確的代碼來打敗這個問題。
這裏是我的代碼看起來像
的型號(型號不是很漂亮):
namespace HouseGaurd.Models
{
public class DropList
{
public SelectList LettingList { get; set; }
}
控制器填補了列表:(這是HTTPGET)
public ActionResult lettingselect()
{
var model = _db.EstateAgents;
DropList rlist = new DropList();
List<SelectListItem> listItems = new List<SelectListItem>();
foreach (var item in model)
{
listItems.Add(new SelectListItem()
{
Value = item.estateAgentID.ToString(),
Text = item.CompanyName
});
}
rlist.LettingList = new SelectList(listItems, "Value", "Text");
return View(rlist);
}
所以這填充名單,這是顯示的模型,到目前爲止一切工作正常,該咒語成立:
<h2>Select a </h2>
@using (Html.BeginForm()) {
@Html.DropDownList("product", Model.LettingList)
<p>
<input type="submit" value="select" />
</p>
}
它使用相關信息填充下拉列表!
現在,當我點擊提交,我們回去POST控制器,這是在計算機啓動時拋出了起來:
[HttpPost]
public ActionResult lettingselect(DropList viewModel)
{
using (var context = new HouseDB())
{
var agent = viewModel.LettingList.DataTextField; //null reference
var hID = context.HouseListers.Single(d=>d.user == User.Identity.Name);
var let = new Letting();
let.approved = false;
let.user = User.Identity.Name;
let.lettingAgent = agent;
let.houseID = hID.houseID;
let.noProblemsRaised = 0;
context.Lettings.Add(let);
context.SaveChanges();
}
return RedirectToAction("Complete");
}
我試圖讓所選擇的值改回,我嘗試使用:
var agent = viewModel.LettingList.DataTextField; //null reference
但正如代碼中所述,這返回一個空引用異常。
明智的巫師,花點時間與我分享你的智慧,以便如何最好地解決這個問題。
非常感謝。 學徒嚮導。
編輯:這是實際的錯誤:
Object reference not set to an instance of an object.
,這是在視圖
@model HouseGaurd.Models.DropList
難道這是導致問題的模式?
問題是您要回發一個名爲'product'的值,所以您的模型上的'LettingList'屬性不可能被模型綁定器實例化。如果您只需要獲取選定的值,請按照您提供的答案中的建議進行操作。 如果您試圖實例化您的LettingList,則需要重新構建它。 – 2013-03-19 12:20:11