Обрабатывать несколько кнопок отправки с проверкой "Remote" в бритве MVC4

У меня есть две кнопки в форме "Событие", как показано ниже,

@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 -->
        }

В My Controller у меня есть следующее действие, когда вы нажимаете " Сохранить",

[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; }

Если я прокомментирую строку Remote validation, то все будет работать отлично, но если я останусь валидацией, то вызывается следующее действие Create() (которое должно вызываться, когда мне нужно открыть форму),

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

Но мне нужно вызвать SaveClick ana SavenNextClick, пожалуйста, любую помощь для удаленной проверки с помощью кнопки отправки.

Ответы

Ответ 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 будет добавлен в ваш запрос и принести правильное значение на основе щелкнутой кнопки.

Ответ 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 and Next

Извините, моя ошибка в предыдущем ответе