繁体   English   中英

ASP.net MVC-将表单值绑定到其他名称

[英]ASP.net MVC - Binding a form value to a different name

我有一个View,它能够创建和编辑已分成部分视图的项目:

MainEditView.cshtml
_CreateChildDialog.cshtml
_EditChildDialog.cshtml

我为Create和Child项分别设置了ViewModels:

public class CreateChildViewModel
{
    public string ItemText { get; set; }
}


public class EditChildViewModel 
{
    public string ItemText { get; set; }
}

由于“编辑”和“创建”对话框的局部视图都将在同一页面上呈现,因此表单ID和名称将存在冲突……因为它们都被称为ItemText。

是否可以在不编写自定义模型绑定程序的情况下自定义这些元素的绑定?

我想做类似的事情:

public class EditChildViewModel
{
    [BindFrom("EditItemText")]
    public string ItemText { get; set; }
}

还是将ViewModel属性重命名为:

public class EditChildViewModel 
{
    public string EditItemText { get; set; }
}

public class CreateChildViewModel
{
    public string CreateItemText { get; set; }
}

编辑基于与达林的融合,我想使这一点更加清楚。

我的父母有一个编辑动作。 编辑父级时,在调用ParentController.Edit操作时,您永远不会创建新子级或编辑子级。

我为Child对象有一个单独的控制器,该控制器具有Create和Edit方法:

public class ChildController 
{
    public ActionResult Edit() {}
    public ActionResult Create() {}
}

当您编辑或创建子级时,我正在使用jQuery调用来异步发布到此控制器。 基本上,我使用jquery对话框创建/编辑一个孩子,当我在对话框中单击“确定”时,该孩子将立即保存。 即使在单击父项的“编辑”操作的“保存”之前,也会发生这种情况。

我会使用编辑器模板。 通常,您会将这两个视图模型打包到一个主视图模型中,该模型将由主视图使用:

public class MyViewModel
{
    public CreateChildViewModel Create { get; set; }
    public EditChildViewModel Edit { get; set; }
}

接着:

@model MyViewModel
@Html.EditorFor(x => x.Create)
@Html.EditorFor(x => x.Edit)

然后我用相应的编辑器模板( ~/Views/Shared/EditorTemplates/CreateChildViewModel.cshtml~/Views/Shared/EditorTemplates/EditChildViewModel.cshtml )替换这两个部分。 编辑器模板将生成相应输入元素的专有名称和ID。

就我个人而言,我倾向于使用编辑器/显示模板而不是局部模板,因为它们可以更好地命名输入元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM