Asp.net mvc asp.net mvc中基于模型值的表单post到多动作方法
在Asp.net MVC中,当单击同一按钮时,是否可以根据模型值将表单发布到两个不同的操作 例如,我想在单击同一按钮“保存”时添加新客户或更新现有客户。可以根据客户的id值将表单发布到两种不同的操作方法 如果客户id值=0,则将其发布到“创建”帐户方法;如果客户id值已存在(不等于0),则将表单发布到“更新”操作方法Asp.net mvc asp.net mvc中基于模型值的表单post到多动作方法,asp.net-mvc,Asp.net Mvc,在Asp.net MVC中,当单击同一按钮时,是否可以根据模型值将表单发布到两个不同的操作 例如,我想在单击同一按钮“保存”时添加新客户或更新现有客户。可以根据客户的id值将表单发布到两种不同的操作方法 如果客户id值=0,则将其发布到“创建”帐户方法;如果客户id值已存在(不等于0),则将表单发布到“更新”操作方法 这在asp.net mvc中可能吗?不,您不能以公平的方式在提交时调用多个操作 您需要为id添加hiddenfield <input type="hidden" name="
这在asp.net mvc中可能吗?不,您不能以公平的方式在提交时调用多个操作 您需要为id添加hiddenfield
<input type="hidden" name="id" value="@model.Id" />
对。这是可能的。有多种方法可以做到这一点 1)您可以根据视图模型属性值有条件地设置窗体
操作
属性值
<form method="post" action="@(Model.Id==0?Url.Action("Create","Home")
:Url.Action("Update","Home"))">
<input type="text" name="FirstName" />
<button type="submit">Save</button>
</form>
当您在提交按钮上指定formaction
属性时,它将覆盖父窗体的action属性值
3)另一个选项是劫持javascript中的表单submit
事件,阻止默认行为(停止表单提交),然后将表单的操作
属性值更新为/create
或/update
并使用javascript触发表单submit
。您可以将Id
属性值保存在表单内部的一个隐藏字段中,并读取该字段的值,然后使用该值确定表单操作属性值的url
假设页面中有一个类型为int
属性的Id的隐藏元素
@model YourViewModel
@using (Html.BeginForm("Create", "Home",FormMethod.Post,new {id="yourFormId"}))
{
@Html.TextBoxFor(a=>a.FirstName)
<button type="submit">Save</button>
@Html.HiddenFor(a=>a.Id)
}
4)另一个选项是始终将表单提交到
Update
或Create
操作,并在该方法内部,根据Id
属性值,根据需要执行更新或创建的代码。是。这适用于视图案例:
@mode MyModel
@{
string action = Model.Id == 0 ? "Create" : "Edit"
}
@using (Html.BeginForm(action, "MyController"))
{
// if Edit need Id
if(action == "Edit")
{
@Html.HiddenFor(model=> model.Id)
}
@Html.TextBoxFor(model >= model.Name);
<input type="submit" value="Save">
}
@modemymodel
@{
字符串操作=Model.Id==0?“创建”:“编辑”
}
@使用(Html.BeginForm(action,“MyController”))
{
//如果需要编辑Id
如果(操作==“编辑”)
{
@Html.HiddenFor(model=>model.Id)
}
@Html.TextBoxFor(model>=model.Name);
}
@model YourViewModel
@using (Html.BeginForm("Create", "Home",FormMethod.Post,new {id="yourFormId"}))
{
@Html.TextBoxFor(a=>a.FirstName)
<button type="submit">Save</button>
@Html.HiddenFor(a=>a.Id)
}
$(function () {
$("#yourFormId").submit(function(e) {
e.preventDefault(); // stop the normal form submit
var id=parseInt($("#Id").val());
var url=$(this).attr("action");
if(id===0)
{
url='/Home/Update'; // Use the Url.Action to be safe to generate this
}
// read the data attribute and update the forms action and do a submit
$(this).closest("form").attr('action', url).submit();
});
});
@mode MyModel
@{
string action = Model.Id == 0 ? "Create" : "Edit"
}
@using (Html.BeginForm(action, "MyController"))
{
// if Edit need Id
if(action == "Edit")
{
@Html.HiddenFor(model=> model.Id)
}
@Html.TextBoxFor(model >= model.Name);
<input type="submit" value="Save">
}