0

MVC をいじり始めたばかりで、次の例を見てこれを達成しようとしています: http://forums.asp.net/t/1670552.aspx

このエラーが発生し続けます:

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

9 行目: @using (Html.BeginForm("Index","Home",FormMethod.Post, new{id = "ID"})){
10 行目: @Html.DropDownListFor(m=>m.id, new SelectList (Model.list, "id","name"),"selectThis")
11 行目: }

コードは次のとおりです。

モデル クラス (ばかげた名前、私は知っています):

これらは、モデルを保存するためだけに使用されるコンソール アプリケーションにあります。

namespace Model
{
  public class Model
  {
    public int id { get; set; }
    public string name { get; set; }
  }

  public class List
  {
    public int id { get; set; }
    public List<Model> list = new List<Model>();
  }

  public class subModel
  {
    public int id { get; set; }
    public int modId { get; set; }
    public string name { get; set; }
  }

  public class subList
  {
    public List<subModel> list = new List<subModel>();
  }
}

コントローラー: (subList.list と List.list にクラスのメソッドを設定していましたが、この方法で試すことにしましたが、同じエラーが発生していました)

namespace DropboxTest.Controllers
{
public class HomeController : Controller
{
    //
    // GET: /Model/

    public ActionResult Index()
    {
        LoadModel();
        return View();
    }

    [ValidateInput(false)]
    [AcceptVerbs("POST")]
    public ActionResult Index([Bind(Exclude = "id")]Model.Model model)
    {
        var modId = Request["id"];
        LoadModel();
        LoadSubCategory(Convert.ToInt32(modId));

        return View();
    }

    public void LoadModel()
    {
        Model.List listM = new Model.List();
        listM.id = 0;
        Model.Model mod1 = new Model.Model();
        mod1.id = 1;
        mod1.name = "me";
        Model.Model mod2 = new Model.Model();
        mod2.id = 2;
        mod2.name = "me";
        listM.list.Add(mod1);
        listM.list.Add(mod2);

        ViewBag.Model = listM;
    }

    public void LoadSubCategory(int id)
    {
        Model.subList subList = new Model.subList();

        Model.subModel sub1 = new Model.subModel();
        Model.subModel sub2 = new Model.subModel();
        sub1.id = 1;
        sub1.name = "notme";
        sub1.modId = 1;
        sub2.id = 1;
        sub2.name = "notme";
        sub2.modId = 1;
        subList.list.Add(sub1);
        subList.list.Add(sub2);

        List<Model.subModel> sel = new List<Model.subModel>();
        foreach (var item in subList.list)
        {
            if (item.modId == id)
            {
                sel.Add(item);
            }
        }
        ViewBag.SubModel = sel;
    }
}
}

表示: (サブモデルのドロップダウンの何かが機能しているかどうかはわかりませんが、その部分にはまだ到達していませんが、w/e.)

@model Model.List
@{
  ViewBag.Title = "Index";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

@using (Html.BeginForm("Index","Home",FormMethod.Post, new{id = "ID"})){
   @Html.DropDownListFor(m=>m.id, new SelectList(Model.list, "id","name"),"selectThis")
}

@if (ViewBag.SubModel != null)
{
   @Html.DropDownList("SubModel",ViewBag.SubModel as SelectList, "select one")
}

それはおそらく本当にばかげたことですが、私はさまざまなことを試して数時間立ち往生しています。

PS: これは単なるテスト アプリです。それがどのように行われるかを確認した後、ConsoleApplications のモデルを使用して DB からデータを取得および保存し、それをビューに表示することで、SQL DB を使用する予定です。

ここまで読んでくださった皆様、素敵な一日をありがとうございました。

4

1 に答える 1

0

コントローラーのビューにモデルを渡すことはなく、単に に保存しViewBag.Modelます。

次のようにしてみてください。

[ValidateInput(false)]
[AcceptVerbs("POST")]
public ActionResult Index([Bind(Exclude = "id")]Model.Model model)
{
    var modId = Request["id"];

    //get model
    var model = LoadModel();

    //pass it to the view
    return View(model);
}
于 2013-09-19T21:40:51.200 に答える