c# - 在 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 <i class="fal fa-sync"></i></button>
...
<button class="btn btn-block btn-info" type="submit" name="action:Validate" style="width: 100%">Proceed <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> Map Companies</button>
...
<button class="btn btn-block btn-warning" type="submit" name="action:Confirm" style="width: 100%"><i class="fal fa-check"></i> 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
解决方案
推荐阅读
- node.js - 如何编辑猫鼬中的所有键
- macos - 具有图形模式的可调整大小的 NSDatePicker
- python - 从网页中提取链接
- android - 除非执行 mSettingsClient.checkLocationSettings,否则无法获取 locationSettings 的 getStatusCode
- .htaccess - 如何使用 htacces 从 URL 中删除锚点(“#”)?
- c - 在 C 中重铸一个数组
- vb.net - 插入查询前的验证
- sql - SQL 列未找到问题
- python - 使用 BeautifulSoup 从带有相关标签的网页中提取所有图像链接
- c# - 从字典中正确地将字符串转换为 Json