将部分绑定到多个操作结果

本文关键字:操作 结果 绑定 | 更新日期: 2023-09-27 18:36:01

我想知道是否有人可以提出克服以下问题的方法。我有以下型号

    // AModel
    public class AModel
    {
        public string PropOne { get; set; }
        public bool PropTwo { get; set; }
        public string Keyword { get; set; }
    }
    public class AModelViewModel
    {
        public AModelViewModel()
        {
            AModel = new AModel();
        }
        public AModel AModel { get; set; }
    }
    //BModel
    public class BModel
    {
        public string PropOne { get; set; }
        public bool PropTwo { get; set; }
        public string Keyword { get; set; }
    }
    public class BModelViewModel
    {
        public BModelViewModel()
        {
            BModel = new BModel();
        }
        public BModel BModel { get; set; }
    }

这是我的控制器的样子

    public ActionResult PageA()
    {
        var model = new AModelViewModel();
        return View(model);
    }
    [HttpPost]
    public ActionResult PageA(AModel aModel)
    {
        return View();
    }
    public ActionResult PageB()
    {
        var model = new BModelViewModel();
        return View(model);
    }
    [HttpPost]
    public ActionResult PageB(BModel bModel)
    {
        return View();
    }

这两个视图如下所示

//PageA
@model WebApplication13.Models.AModelViewModel
@using (Html.BeginForm())
{
    <div class="form-group">
        <label>Title</label>
        <input type="title" class="form-control" id="title" name="Model.PropOne">
    </div>
    <div class="checkbox">
        @Html.CheckBoxFor(x => x.Model.PropTwo)
    </div>
    @Html.Partial("~/Views/Shared/_RandomView.cshtml")
    <button type="submit" class="btn btn-default">Submit</button>
}

//PageB
@model WebApplication13.Models.BModelViewModel
@using (Html.BeginForm())
{
    <div class="form-group">
        <label>Title</label>
        <input type="title" class="form-control" id="title" name="Model.PropOne">
    </div>
    <div class="checkbox">
        @Html.CheckBoxFor(x => x.Model.PropTwo)
    </div>
    @Html.Partial("~/Views/Shared/_RandomView.cshtml")
    <button type="submit" class="btn btn-default">Submit</button>
}

两个视图都使用以下分部视图

//_RandomView
<div class="form-group">
    <label for="keyword">Keyword</label>
    <input type="text" class="form-control" name="Keyword" />
</div>

我遇到的问题是,由于此部分是共享的,并且关键字输入的 name 属性是"关键字",当我在任一页面上提交表单时,关键字属性永远不会绑定,因此它始终为空。有没有办法我可以共享这个部分,但根据我使用的页面更改前缀。任何帮助将不胜感激。

将部分绑定到多个操作结果

而不是使用paritial视图。在名为 Keyword.cshtml 的 Views''Shared''EditorTemplates 中创建一个名为 Keyword.cshtml 的编辑器模板,其代码类似于

@model string
//_RandomView
<div class="form-group">
    <label for="keyword">Keyword</label>
    @Hmlt.TextBoxFor(a => a, new {class="form-control"})
</div>

然后在您的观点中,您只需调用

@Html.EditorFor(a => a.AModel.Keyword,"Keyword")

如果你必须使用PartialView....,你可以在调用Partial View时通过ViewDataDictionary传入HtmlFieldPrefix 为此,您可以像这样称呼您的部分。

@Html.Partial("~/Views/Shared/_RandomView.cshtml", 
                 new ViewDataDictionary { TemplateInfo = new TemplateInfo() {
                       HtmlFieldPrefix = "AModel" } });

然后在您的部分视图中,您将需要使用 @Html.文本框帮助程序,如下所示。

<div class="form-group">
    <label for="keyword">Keyword</label>
    @Html.TextBox("Keyword", string.Empty, new { @class="form-control" })
</div>