0

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var myViewModel = new CreateFavoriteListViewModel();
        var favoriteTypeDropdownList = new List<SelectListItem>();
        favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text1", Value = "1" });
        favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text2", Value = "2" });

        myViewModel.FavoriteTypeDropdownList = favoriteTypeDropdownList;
        return View(myViewModel);
    }

    [HttpPost]
    public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel)
    {
        return new EmptyResult();
    }
}

モデル:

public class CreateFavoriteListViewModel
{
    public CreateFavoriteListInputModel CreateFavoriteListInputModel { get; set; }
    public List<SelectListItem> FavoriteTypeDropdownList { get; set; }
}

public class CreateFavoriteListInputModel
{
    [Required]
    public string ListName { get; set; }
    public int SelectedFavoriteType { get; set; }
}

意見:

@model MvcApplication3.Controllers.CreateFavoriteListViewModel
<h2>title</h2>

@using (Html.BeginForm("Post", "Home", FormMethod.Post))
{
    @Html.LabelFor(x => x.CreateFavoriteListInputModel.ListName)
    @Html.TextBoxFor(x => x.CreateFavoriteListInputModel.ListName)

    @Html.LabelFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType)
    @Html.DropDownListFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType, Model.FavoriteTypeDropdownList)
    <input type="submit" value="Save" id="btnCreateList" name="btnCreateList" />
}

ご覧のとおり、特別なラムダ式を持つ入力モデルを使用しています。( x=>x.CreateFavoriteListInputModel.ListName)。奇妙な問題は、これが自宅のコンピューターでは機能するが、会社のコンピューターでは機能しないことです ( createFavoriteListInputModel = Null)。ASP.NET MVC4 などにはさまざまなバージョンがあるようです。

この種のモデル バインディングが ASP.NET MVC でサポートされたときから知っている人もいるでしょう。

私のコードは役に立ちますか?

ビューモデルとラムバ式を変更すると、x=>x.ListNameすべてが両方のコンピューターで機能します。

4

2 に答える 2

0

問題が見つかりました。問題はここにあります:

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel)
{
    return new EmptyResult(); // DOES WORK
}

私の会社のマシンでは、次のようなものがありました。

[HttpPost]
public ActionResult Post(CreateFavoriteListInputModel inputModel)
{
    return new EmptyResult(); // DOES NOT WORK
}

パラメーター名は、複合オブジェクトの名前と同じでなければなりませCreateFavoriteListInputModelん (大文字と小文字は区別されません)。

投稿パラメーター:

  • CreateFavoriteListInputModel.ListName=TestList
  • CreateFavoriteListInputModel.SelectedFavoriteType=1
  • btnCreateList=保存

私が理解していないのは、なぜパラメータ名が重要なのですか? プリミティブ型の場合、これは明らかですが、複雑な型の場合はわかりません。

于 2012-11-01T11:55:22.563 に答える
0

問題は、ページに渡したモデルとコントローラーに渡したモデルの違いだと思います。

@model MvcApplication3.Controllers.CreateFavoriteListViewModel  <-- was passed to the page

しかしCreateFavoriteListInputModel、コントローラーの Post アクションに渡されました

于 2012-11-01T00:04:23.060 に答える