Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc asp.net mvc中基于模型值的表单post到多动作方法_Asp.net Mvc - Fatal编程技术网

Asp.net mvc asp.net mvc中基于模型值的表单post到多动作方法

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值将表单发布到两种不同的操作方法

如果客户id值=0,则将其发布到“创建”帐户方法;如果客户id值已存在(不等于0),则将表单发布到“更新”操作方法


这在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">
}