如何从onSuccess Ajax调用

问题描述:

的局部视图中查找单击哪个按钮我在局部视图中有2个按钮(保存和预览)。这部分视图正在执行Ajax帖子,并且两个按钮的工作都很好,其中Preview仅允许预览小部件,而Save则将数据保存到数据库中。这里我有2个问题如何从onSuccess Ajax调用

  1. 我无法找到哪个按钮被点击(从Ajax.BeginForm onSuccess)。
  2. 我的控制器不重定向到操作链接

公众的ActionResult EditWidget(WidgetViewModel视图模型,字符串的onSave,串onPreview)

{

if(!string.IsNullOrEmpty(onPreview)) 
    { 
     viewmodel.ButtonName = "Preview"; 

     var parameters = ""; 

     if (!string.IsNullOrEmpty(viewmodel.OverriedParameters)) 
      parameters = viewmodel.OverriedParameters; 
     else 
      parameters = viewmodel.DefaultParameters; 

     return PartialView("Widgets/_Preview", previewViewModel); 
    } 
    else if(!string.IsNullOrEmpty(onSave)) 
    { 
     viewmodel.ButtonName = "Save"; 

     if(ModelState.IsValid) 
     { 
      //RedirectToAction("GetPage", "Home", new { Page = pageId 
      return Json(Url.Action("GetPage", new {Page = pageId})); 
     } 
    } 

    return null; 
} 

我的部分观点如下

@using (Ajax.BeginForm("EditWidget", "Home", new AjaxOptions { UpdateTargetId = "divPreview", HttpMethod = "POST", OnBegin = "application.getpage.onBeginPreview", OnSuccess = "application.getpage.onSuccessPreview" })) 
    { 
     <div class="form-inline"> 
      @Html.LabelFor(x => x.OverriedParameters, "Is Widget Active ?", new { @class = "col-sm-2" }) 
      @Html.TextBoxFor(x => x.OverriedParameters, new { @class = "col-sm-1" }) 
     </div> 

     <div class="form-inline"> 
      @Html.LabelFor(x => x.DefaultParameters, "Is Widget Active ?", new { @class = "col-sm-2" }) 
      @Html.TextBoxFor(x => x.DefaultParameters, new { @class = "col-sm-1" }) 
     </div> 

    <div class="form-inline"> 
     <input id="btnSave" name="onSave" type="submit" class="btn btn-primary" style="width:65px" value="Save" /> 
     <input id="btnPreview" name="onPreview" type="submit" class="btn btn-primary" style="width:65px" value="Preview" /> 
    </div> 

    } 

<div id="divPreview" style="margin-top:5px"> 
</div> 

and my onSuccess is a S请按照

onSuccessPreview: function (data, textStatus, jqXHR) { 
// Here i want to find which button is clicked from my partial view. 
// On Save button click i want to redirect to the action method in the same controller while on Preview button i don't want to do anything 
    } 
+0

我想预览按钮不应该发布表单。将其类型更改为'button'而不是'submit'。 – Mairaj

+0

带有类型按钮,我无法调用负责呈现预览部分视图的操作方法。 –

你可以添加一个隐藏输入:在你的onSucces使用的onclick Javascript方法

<div class="form-inline"> 
    <input id="btnSave" name="onSave" type="submit" class="btn btn-primary" style="width:65px" value="Save" /> 
    <input id="btnPreview" name="onPreview" type="submit" class="btn btn-primary" style="width:65px" value="Preview" /> 
    <input type="hidden" id="what-was-clicked" /> 
     </div> 

更新它的值(前提交),并阅读:

onSuccessPreview: function (data, textStatus, jqXHR) { 
    var clickedButton = $("#what-was-clicked").val(); 
    } 
+0

非常感谢你vhr。这正是我期待的。 –

+0

欢迎您:) – vhr