自定义模式 - 如何停止保存按钮的默认行为,以便自定义模式可以先做它的事情? [英] Custom modal - how to stop a save buttons default behavior so the custom modal can do its thing first?

查看:69
本文介绍了自定义模式 - 如何停止保存按钮的默认行为,以便自定义模式可以先做它的事情?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Av Asp.Net MVC 网络应用程序.

我正在使用 Window.confirm() 方法在单击保存按钮时显示模式对话框.它工作正常 - 模态出现并在执行控制器代码之前等待响应.

但是,我想要一个更好看的模态.

如何让它阻止控制器代码执行并第一次等待我的模态响应?有人告诉我模态不是真正的模态,我需要在那里有一个处理程序.只是不确定如何或在哪里编码.

Razor 视图(简化 - 不显示字段):

@using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile", FormMethod.Post)){<div class="panel-body"><div class="row"><div class="col-md-3">.....

<div class="panel-body"><div class="row"><div class="form-group"><div class="col-md-2"><input type="submit" value="Save" class="btn btn-primary saveButton";/>

<div class="col-md-2">@Html.ActionLink("取消更改", "GetUserProfile", "UserProfile", null, new { @class = "btn btn-info" })

@Html.AntiForgeryToken()}@Scripts.Render("~/bundles/jqueryval")@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/bootstrap")@Styles.Render("~/Content/css")@* 模态.*@<div class="modalfade" id="myModal4" role="dialog"><div class="modal-dialog"><div class="modal-content"><div class="modal-body" style="padding:10px;"><h4 class="text-center">您确定要保存吗?继续吗?<div class="text-center"><a class="btn btn-info btn-yes4">是</a><a class="btn btn-default btn-no4">No</a>

<script type="text/javascript">$(document).ready(function () {$(".saveButton").click(function (e) {//触发(显示)模态.$("#myModal4").modal({背景:'静态',键盘:假});//在回调函数中传递 true.$(".btn-yes4").click(function () {$("#myModal4").modal("隐藏");返回真;});//在回调函数中传递 false.$(".btn-no4").click(function () {$("#myModal4").modal("隐藏");返回假;});//关闭模态后将其移除.$("#myModal4").on('hidden.bs.modal', function () {$("#myModal4").remove();});});//标准的 Window.confirm() 方法.它有效 - 阻止控制器代码执行并等待//用于响应.但它很丑.//$('.saveButton').click(function (e) {//if (confirm("Are you sure you want to save.Continue?")) {//返回真;//}//返回假;//});});

解决方案

大功告成!

给你的表单一个唯一的 ID

在是按钮点击事件时提交.

继续在提交按钮中返回 false.

 @using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile",FormMethod.Post, new{id="uniqueId"})){

 $(".btn-yes4").click(function () {$("#myModal4").modal("隐藏");jQuery("#uniqueId").submit();//返回真;});

最后

 返回假;});

完整代码

Razor 视图(简化 - 不显示字段):

 @using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile",FormMethod.Post, new{id="uniqueId"})){<div class="panel-body"><div class="row"><div class="col-md-3">.....

<div class="panel-body"><div class="row"><div class="form-group"><div class="col-md-2"><输入类型=提交"值=保存"class="btn btn-primary saveButton";/>

<div class="col-md-2">@Html.ActionLink("取消更改", "GetUserProfile","UserProfile", null, new { @class = "btn btn-info" })

@Html.AntiForgeryToken()}@Scripts.Render("~/bundles/jqueryval")@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/bootstrap")@Styles.Render("~/Content/css")

@* 模态.*@

 

<script type="text/javascript">$(document).ready(function () {$(".saveButton").click(function (e) {//触发(显示)模态.$("#myModal4").modal({背景:'静态',键盘:假});//在回调函数中传递 true.$(".btn-yes4").click(function () {$("#myModal4").modal("隐藏");//返回真;jQuery("#uniqueId").submit();});//在回调函数中传递 false.$(".btn-no4").click(function () {$("#myModal4").modal("隐藏");//返回假;});//关闭模态后将其移除.$("#myModal4").on('hidden.bs.modal', function () {$("#myModal4").remove();});返回假;});

编辑:

为了不每次都绑定事件点击,也可以使用这段代码

 

Av Asp.Net MVC web app.

I am using the Window.confirm() method to display the modal dialog when a save button is clicked. It works fine - the modal appears and waits for a response before executing the controller code.

However, I want a better looking modal.

How do I get it to block the controller code execution and 1st wait for my modal to respond? I'm told the modal is not a true modal and that I need a handler in there. Just not sure how or where to code that.

The Razor view (simplified - not showing fields):

@using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile", FormMethod.Post))
{
    <div class="panel-body">
        <div class="row">
            <div class="col-md-3">
              .....
            </div>
        </div>
    </div>

<div class="panel-body">
    <div class="row">
        <div class="form-group">
            <div class="col-md-2">
                <input type="submit" value="Save" class="btn btn-primary saveButton"; />
            </div>
            <div class="col-md-2">
                @Html.ActionLink("Cancel Changes", "GetUserProfile", "UserProfile", null, new { @class = "btn btn-info" })
            </div>
        </div>
    </div>
 </div>

  @Html.AntiForgeryToken()
}

@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Styles.Render("~/Content/css")

@* Modal. *@
<div class="modal fade" id="myModal4" role="dialog">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-body" style="padding:10px;">
            <h4 class="text-center">Are you sure you want to save. Continue ?</h4>
            <div class="text-center">
                <a class="btn btn-info btn-yes4">Yes</a>
                <a class="btn btn-default btn-no4">No</a>
            </div>
        </div>
    </div>
</div>
</div>

<script type="text/javascript">
$(document).ready(function () {
    $(".saveButton").click(function (e) {
        // Trigger(show) the modal.
        $("#myModal4").modal({
            backdrop: 'static',
            keyboard: false
        });

        // Pass true in the callback function.
        $(".btn-yes4").click(function () {
            $("#myModal4").modal("hide");
            return true;
        });

        // Pass false in the callback function.
        $(".btn-no4").click(function () {
            $("#myModal4").modal("hide");
            return false;
        });

        // Remove the modal once it is closed.
        $("#myModal4").on('hidden.bs.modal', function () {
            $("#myModal4").remove();
        });
    });

    // The standard Window.confirm() method. It works - blocks the controller code execution and waits 
    // for a response. But it is ugly.

    //$('.saveButton').click(function (e) {
    //    if (confirm("Are you sure you want to save. Continue ?")) {
    //        return true;
    //    }

    //    return false;
    //});
});
</script>

解决方案

You are almost done!

Give your form an unique Id

submit it on yes button click event.

continue to return false in the submit button.

     @using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile",
     FormMethod.Post, new{id="uniqueId"}))
     {

And

   $(".btn-yes4").click(function () {
        $("#myModal4").modal("hide");
         jQuery("#uniqueId").submit();
        // return true;
    });

And finally

    return false;
    });

Complete code

The Razor view (simplified - not showing fields):

 @using (Html.BeginForm("ProcessSaveUserProfile", "UserProfile", 
     FormMethod.Post, new{id="uniqueId"}))
    {
       <div class="panel-body">
           <div class="row">
              <div class="col-md-3">
               .....
             </div>
         </div>
     </div>

  <div class="panel-body">
     <div class="row">
         <div class="form-group">
              <div class="col-md-2">
            <input type="submit" value="Save" 
             class="btn btn-primary saveButton"; />
             </div>
        <div class="col-md-2">
            @Html.ActionLink("Cancel Changes", "GetUserProfile", 
               "UserProfile", null, new { @class = "btn btn-info" })
               </div>
           </div>
       </div>
   </div>

       @Html.AntiForgeryToken()
    }

   @Scripts.Render("~/bundles/jqueryval")
   @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @Styles.Render("~/Content/css")

@* Modal. *@

   <div class="modal fade" id="myModal4" role="dialog">
       <div class="modal-dialog">
          <div class="modal-content">
            <div class="modal-body" style="padding:10px;">
                <h4 class="text-center">Are you sure you want to save. Continue ?</h4>
                <div class="text-center">
                   <a class="btn btn-info btn-yes4">Yes</a>
                  <a class="btn btn-default btn-no4">No</a>
                </div>
           </div>
       </div>
    </div>
    </div>

     <script type="text/javascript">
         $(document).ready(function () {
         $(".saveButton").click(function (e) {
              // Trigger(show) the modal.
             $("#myModal4").modal({
                  backdrop: 'static',
                keyboard: false
           });

    // Pass true in the callback function.
    $(".btn-yes4").click(function () {
        $("#myModal4").modal("hide");
        //return true;
          jQuery("#uniqueId").submit();
    });

    // Pass false in the callback function.
    $(".btn-no4").click(function () {
        $("#myModal4").modal("hide");
        //return false;

    });

    // Remove the modal once it is closed.
    $("#myModal4").on('hidden.bs.modal', function () {
        $("#myModal4").remove();
    });
     return false;
});
 </script>

EDITS:

In order not to bind event click everytime, you can also use this code

     <script type="text/javascript">
         $(document).ready(function () {
         var $modal = $("#myModal4").modal({
                  backdrop: 'static',
                keyboard: false
           });
    // Pass true in the callback function.
    $(".btn-yes4").click(function () {
        $("#myModal4").modal("hide");
        //return true;
          jQuery("#uniqueId").submit();
    });

    // Pass false in the callback function.
    $(".btn-no4").click(function () {
        $("#myModal4").modal("hide");
        //return false;            
    });

     $(".saveButton").click(function (e) {
              // Trigger(show) the modal.
              $modal.model('show');

     return false;
    });
    </script>

这篇关于自定义模式 - 如何停止保存按钮的默认行为,以便自定义模式可以先做它的事情?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆