将部分绑定到多个操作结果
本文关键字:操作 结果 绑定 | 更新日期: 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>