1

コードの小さな問題を修正するために魔法が必要なため、ここ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

これが問題の原因である可能性がありますか?

4

2 に答える 2

1

ドロップダウン値を保持するためのプロパティをモデルに作成します。例:

public int EstateAgentID {get;set;}

DropDownListからDropDownListForに変更します。好き、

@Html.DropDownListFor(model=>model.EstateAgentID , Model.LettingList)

lettingselectメソッドで次のことを行います。

var agent = viewModel.EstateAgentID ;

編集::ドロップダウンの名前を使用してドロップダウン値を取得することもできます。このために以下を行います:

メソッドをに変更します

public ActionResult lettingselect(DropList viewModel,string product)//product is the name of your dropdown

こちらの商品がお好きな商品です

于 2013-03-19T12:14:04.667 に答える
1

モデル:

public SelectList List{ get; set; }

コノローラー:

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
        });
    }
    ViewData["List"] = listItems;
    return View(rlist);
 }

意見:

  @Html.DropDownList("List", ViewData["List"] as SelectList)

コントローラでドロップダウン選択値にアクセスできます。私はそれがあなたに完全に役立つことを願っています。

于 2014-01-30T14:37:31.277 に答える