首页 > 解决方案 > 在 MVC 页面上显示(剑道)对话框,带有多个提交按钮

问题描述

我有一个带有多个提交按钮的复杂视图。我通过这个属性实现了多次提交行为:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
    public string Name { get; set; }

    public string Argument { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        var isValidName = false;
        var keyValue = $"{Name}:{Argument}";
        var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);

        if (value != null)
        {
            controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
            isValidName = true;
        }

        return isValidName;
    }
}

在控制器中,这就是我使用属性的方式:

    [HttpPost]
    [ValidateAntiForgeryToken]
    [MultipleButton(Name = "action", Argument = "Refresh")]
    public async Task<ActionResult> GenerateBillRefresh(GenerateBillViewModel model)
    {
       ...
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [MultipleButton(Name = "action", Argument = "MapCompanies")]
    public async Task<ActionResult> GenerateBillMapCompanies(GenerateBillViewModel model)
    {
       ...
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [MultipleButton(Name = "action", Argument = "Validate")]
    public async Task<ActionResult> GenerateBillValidate(GenerateBillViewModel model)
    {
       ...
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [MultipleButton(Name = "action", Argument = "Confirm")]
    public async Task<ActionResult> GenerateBillConfirm(GenerateBillViewModel model)
    {
       ...
    }

在视图上,按钮写为:

    <button class="btn btn-success" type="submit" name="action:Refresh" style="width: 100%">Refresh&nbsp;<i class="fal fa-sync"></i></button>
    ...
    <button class="btn btn-block btn-info" type="submit" name="action:Validate" style="width: 100%">Proceed&nbsp;<i class="fal fa-arrow-right"></i></button>
    ...
    <button class="btn btn-block btn-info" type="submit" name="action:MapCompanies" style="width: 100%"><i class="fal fa-magnet"></i>&nbsp;Map Companies</button>
    ...
    <button class="btn btn-block btn-warning" type="submit" name="action:Confirm" style="width: 100%"><i class="fal fa-check"></i>&nbsp;Confirm</button>

现在,这action:Confirm是我想阻止通过对话框(Kendo MVC 对话框)提交的按钮,该按钮带有简单的文本和一个是和一个否按钮。

我做了什么撞墙:

    @(Html.Kendo().Dialog()
      .Name("dialogConfirm")
      .Title("Bill Generate")
      .Visible(false)
      .Content($"<p>Are you sure you want to bill <strong>{(!string.IsNullOrWhiteSpace(Model?.CustomerName)?Model?.CustomerName:Model?.DefaultCompany)}</strong>?<p>")
      .Width(400)
      .Modal(true)
      .Actions(actions =>
      {
          actions.Add().Text("No");
          actions.Add().Text("Yes").Primary(true).Action("dialogActionYes");
      })
    )

@section Scripts {
    <script type="text/javascript">
        ...
        var dialogConfirm = $("#dialogConfirm");

        $("#actionConfirm").click(function (e) {
            e.preventDefault();
            dialogConfirm.data("kendoDialog").open();

            return false;
        });

        function dialogActionYes(e) {
            dialogConfirm.data("kendoDialog").close();

            $("#FormBillAmin").submit();
        }
    </script>
}

问题: .submit() 没有出现在我通过 MultipleButtonAttribute 设置的特定操作上:action:Confirm

标签: c#asp.net-mvc-5kendo-asp.net-mvc

解决方案


推荐阅读