【发布时间】:2017-01-26 14:05:57
【问题描述】:
是否可以从@Html.EditorFor 中修改发布到控制器操作的属性名称?
我有一个视图,它既显示对象列表,又显示一个允许用户创建对象的表单。如果可能的话,我只想在创建时发回新的对象值,而不是整个视图模型。
视图的 ViewModel 结构如下所示:
public class GenericIndexViewModel
{
public IEnumerable<GenericListViewModel> ExistingObjects { get; set; }
public GenericCreateViewModel NewObject { get; set;
}
public class GenericCreateViewModel
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
}
在视图中,我循环通过ExistingObjects 来显示所有现有对象,在下面我使用@Html.BeginForm("Index", "GenericController", FormMethod.Post) 创建一个表单,在里面我有适当的@Html.EditorFor(m => m.NewObject.PropertyA)。查看下面的sn-p:
@model Namespace.Models.Generic.GenericIndexViewModel
...
@if (Model.ExistingObjects.Any())
{
// Display list of objects
}
...
@using (Html.BeginForm("Index", "GenericController", FormMethod.Post))
{
@Html.ValidationSummary(true)
<div class="field-holder">
@Html.LabelFor(m => m.NewObject.PropertyA)
@Html.EditorFor(m => m.NewObject.PropertyA)
</div>
<div class="field-holder">
@Html.LabelFor(m => m.NewObject.PropertyA)
@Html.EditorFor(m => m.NewObject.PropertyA)
</div>
<div>
<input type="submit" value="Save" name="command" />
</div>
}
动作方法签名如下:
[HttpPost]
public ActionResult Index(GenericCreateViewModel model) { ... }
当我提交表单时,尽管model 参数是null,但它成功触发了操作方法。
当我检查帖子数据时,我可以看到属性以 NewObject 为前缀:
NewObject.PropertyA=test1&NewObject.PropertyB=test2
如何防止前缀,或让操作方法将前缀属性识别为参数?
【问题讨论】:
-
您的视图中的@model 是什么?
-
请出示必要的视图相关代码
-
按要求添加了视图 sn-p。
-
public ActionResult Index([Bind(Prefix = "NewObject ")]GenericCreateViewModel model) -
@StephenMuecke 请添加您的评论作为答案,因为我相信这可以更准确地解决所提出的具体问题。
标签: c# asp.net asp.net-mvc razor asp.net-mvc-5