コードの小さな問題を修正するために魔法が必要なため、ここStackoverflowのWiseWizards評議会に来ました。
ドロップダウンリストからデータを受け取ろうとしています。たくさんの呪文を試しました...しかし、自分の力が弱すぎると感じています。ドロップダウンリストからデータを取得しようとすると、コンピューターが少し病気になります。だから私はあなたの賢さ(それは一言でさえありますか?)がこの問題を打ち負かすための正しいコードを思いつくのに役立つことを願ってあなたたちのところに来ました。
これが私のコードのようです
モデル(モデルとしてはあまりきれいではありません):
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
しかし、コードで述べられているように、これはnull参照例外で戻ってきます。
賢明な魔法使い、この問題に最もよく取り組む方法についてのあなたの知恵を私と共有するために少し時間を取ってください。
どうもありがとう。見習いウィザード。
編集:これは実際のエラーです:
Object reference not set to an instance of an object.
これがビューのモデルです
@model HouseGaurd.Models.DropList
これが問題の原因である可能性がありますか?