在 MVC4 razor 中使用“远程”验证处理多个提交按钮

Posted

技术标签:

【中文标题】在 MVC4 razor 中使用“远程”验证处理多个提交按钮【英文标题】:Handle multiple submit buttons with "Remote" validation in MVC4 razor 【发布时间】:2014-02-16 12:51:39 【问题描述】:

我的事件表单中有两个按钮,如下所示,

@using (Ajax.BeginForm("Create", "Events", new AjaxOptions
        
            InsertionMode = InsertionMode.Replace,
            HttpMethod = "POST",
            OnSuccess = "updateSuccess"
        , new  @id = "updateEventForm" ))
        

            <div class="modal-body form-horizontal">
                <div class="form-group">
                    <label class="col-sm-2 control-label">@html.LabelFor(model => model.Code)</label>
                    <div class="col-sm-10">
                        @if (Model.EventID <= 0)
                        
                            @Html.TextBoxFor(model => model.Code, new  id = "txtCode", Class = "form-control", placeholder = "Code", Value = "E_" + new Random().Next().ToString() )
                        
                        else
                        
                            @Html.TextBoxFor(model => model.Code, new  id = "txtCode", Class = "form-control", placeholder = "Code" )
                        
                        @Html.ValidationMessageFor(model => model.Code)
                    </div>
                </div>              
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <input type="submit" value="Save" class="btn btn-primary" name="action:Save" id="btnSave" />
                        <input type="submit" value="Save & Next" class="btn btn-primary" name="action:SavenNext" id="btnSaveNext" />
                    </div>
                </div>
            </div>
            <!-- // Modal body END -->
        

在我的控制器中,点击“保存”时,我有以下操作,

[HttpPost]
        [MultipleButton(Name = "action", Argument = "Save")]
        public ActionResult SaveClick(Events objEvents)
        
            int Result = CreateEvent(objEvents);
            if (Result == 0)
                return null;
            else
                return RedirectToAction("Index");
        

在点击“保存并下一步”的同时,将调用以下操作,

 [HttpPost]
        [MultipleButton(Name = "action", Argument = "SavenNext")]
        public ActionResult SavenNextClick(Events objEvents)
        
            int Result = CreateEvent(objEvents);
            if (Result == 0)
                return null;
            else
                return Json(JsonResponseFactory.SuccessResponse(objEvents.SubscriptionID), JsonRequestBehavior.AllowGet);
        

我对我的模型进行了远程验证,如下所示,

 [Remote("codeExist", "Events", AdditionalFields = "EventID", HttpMethod = "POST", ErrorMessage = "Code must be unique!")]
        public string Code  get; set; 

如果我将评论远程验证行,那么一切正常,但如果我将保持验证,然后调用 Create() 操作(当我需要打开表单时必须调用它),

 public ActionResult Create(int SubscriptionID)
        
            FillEventTypeDropDown();
            objEvents.SubscriptionID = SubscriptionID;
            return PartialView(objEvents);
        

但我需要调用 SaveClick 和 SavenNextClick,请帮助使用多个提交按钮进行远程验证。

【问题讨论】:

你可以在这里看到你的答案:[***.com/questions/442704/… [1]:***.com/questions/442704/… @Mostafa Soghandi,我已经转发了这个链接,我已经根据第一个答案完成了我的代码。但是,它还没有完成。 【参考方案1】:

您可以为 HTML 按钮添加操作名称。

<input type="submit" value="Save" class="btn btn-primary" actionname="save" id="btnSave" />
<input type="submit" value="Save & Next" class="btn btn-primary" actionname="savenext" id="btnSaveNext" />

并且在控制器端有一种方法:

[HttpPost]
public ActionResult Create(..., string actionname = "") 
    if(actionname == "save") then //do something
    else //do someting else


我的意思是 actionname 参数将被添加到您的查询字符串中,并根据单击的按钮带来适当的值。

【讨论】:

它不起作用,actionname 没有显示为属性,它仍然在控制器的操作中返回 null。 对不起,我的错误试试这个。【参考方案2】:
<input type="submit" value="Save" class="btn btn-primary" name="actionname" id="btnSave" />
<input type="submit" value="Save & Next" class="btn btn-primary" name="actionname" id="btnSaveNext" />

和控制器端仍然与之前的答案相同。 actionname 参数将从按钮中获取值:因此在本例中为 Save 或 Save & Next

对不起,我之前回答的错误

【讨论】:

我也试过这个,但是通过远程验证,它不起作用。没有远程验证,一切都会正常工作。

以上是关于在 MVC4 razor 中使用“远程”验证处理多个提交按钮的主要内容,如果未能解决你的问题,请参考以下文章

MVC4 不显眼的验证不等待远程验证完成

Asp.Net Core Razor 页面中的远程验证

在ASP.NET MVC4中如何执行远程验证?

为啥在 MVC4 Razor 视图中找不到扩展方法?

如何使用 MVC4 和 Razor 设置 javascript 变量

[转载].NET MVC4 Razor 视图预编译