简单的create-from故障排除

时间:2017-02-27 17:57:39

标签: asp.net-mvc razor

我正在尝试从aps.net mvc中的视图中读取一个值:我知道这似乎是一个非常基本的问题,但是,我找不到任何解决方案,所以我转向你:In我的情况,似乎从未发送参数playlistModel.Model.Name,或者至少为null。

我的控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(PlaylistViewModelDetails playlistModel)
{
    if (!String.IsNullOrEmpty(playlistModel.Model.Name))
    {
        //this is never called due to playlistModel.Model.Name being null.
        return RedirectToAction("Index");
    }
    return View(playlistModel);
}


@model Orpheus.Models.ViewModels.PlaylistViewModelDetails
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Model.Name, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Model.Name, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Erstellen" class="btn btn-default" />
        </div>
    </div>
</div>
}


public class PlaylistViewModelDetails
{
    public PlaylistModel Model = new PlaylistModel(); //a seperate class containing a string value, which must be read from the form
}

感谢您帮助我解决此问题!

1 个答案:

答案 0 :(得分:1)

您的PlaylistViewModelDetails仅包含Model的字段。 DefaultModelBinder仅绑定属性,而不绑定字段。

将模型更改为

public class PlaylistViewModelDetails
{
    public PlaylistModel Model { get; set; }
}

如果要初始化PlaylistModel

,请添加无参数构造函数
public PlaylistViewModelDetails()
{
    Model = new PlaylistModel();
}

另请注意,Name中的PlaylistModel也需要是属性。