0

部分的なビューを使用しているときに、MVCをビューモデル内のビューモデルにバインドする方法を教えてもらえますか?

 public class HomeController : Controller
    {
        //
        // GET: /Home/

        [HttpGet]
        public ActionResult Index()
        {
            AVm a = new AVm();
            BVm b = new BVm();
            a.BVm = b;

            return View(a);
        }

        [HttpPost]
        public ActionResult Index(AVm vm)
        {
            string name = vm.BVm.Name; // will crash BVm == null


            return View(vm);
        }
    }

//インデックスビュー

@model MvcApplication4.Models.AVm

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using (Html.BeginForm("Index","Home",FormMethod.Post))
{
    <text>Id:</text> @Html.TextBoxFor(x => x.Id)
    @Html.Partial("SharedView", Model.BVm)

    <input type="submit" value="submit" />
}

// SharedView

@model MvcApplication4.Models.BVm

<text>Name:</text> @Html.TextBoxFor(x => x.Name)



 Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 26:         public ActionResult Index(AVm vm)
Line 27:         {
Line 28:             string name = vm.BVm.Name; // will crash BVm == null
Line 29: 
Line 30: 
4

1 に答える 1

1

問題は、パーシャルでは、モデルがビューモデルBVmのプロパティを認識していないことですAVm。だからあなたがそのようなことをするとき@Html.TextBoxFor(x => x.Name)それはただのようなものを生成するでしょう

<input type="text" name="Name" id="Name" value="" />

本当に必要なのは

<input type="text" name="BVm.Name" id="Name" value="" />

ここで提案されているように自分で入力を生成するか、次のように試すことができます。

public ActionResult Index(AVm vm, BVm bvm)

競合するプロパティ名がないと仮定します。

于 2012-12-02T06:18:07.380 に答える