首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提交按钮调用所有HttpPost

提交按钮调用所有HttpPost
EN

Stack Overflow用户
提问于 2016-06-10 12:54:01
回答 2查看 592关注 0票数 0

所需的工艺流程:

  • 用户填写表单
  • 保存表单并提供结果视图
  • 在结果视图中,有几个超链接提供弹出式窗口来创建行动计划。
  • 弹出窗口的保存按钮应该调用适当的控制器操作
  • 根据弹出式创建成功更新结果视图

问题:在保存表单时调用了两个HttpPost操作。

当前代码:初始形式

代码语言:javascript
复制
 @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken();
...
   var groupItem = settings.Items.AddGroupItem(grpSet =>
   {
       grpSet.ShowCaption = DefaultBoolean.False;
       grpSet.GroupBoxDecoration = GroupBoxDecoration.None;
       grpSet.SettingsItemCaptions.Location = LayoutItemCaptionLocation.Left;
       grpSet.SettingsItemHelpTexts.Position = HelpTextPosition.Auto;
       grpSet.ColCount = 2;
   });

   groupItem.Items.Add(item =>
   {
       item.NestedExtensionType = FormLayoutNestedExtensionItemType.Button;
       item.ShowCaption = DefaultBoolean.False;
       item.ColSpan = 1;
       item.HorizontalAlign = FormLayoutHorizontalAlign.Center;

       var btnSettings = (ButtonSettings)item.NestedExtensionSettings;
       btnSettings.Name = "btnCreate";
       btnSettings.Text = "Finish and save";
       btnSettings.UseSubmitBehavior = true;
       btnSettings.RouteValues = new { Controller = "General", Action = "A_General", completed = true };

   });
}

弹出的结果视图:

代码语言:javascript
复制
 <div> Display result
@Html.DevExpress().HyperLink(hl =>
                        {
                            hl.Name = "createAP" ;
                            hl.NavigateUrl = "javascript:void(0)";
                            hl.Properties.ClientSideEvents.Click = "function (s, e) { pcCreateAP.PerformCallback(); pcCreateAP.Show(); }";
                            hl.Properties.ImageUrl = "~/Images/AddFile_16x16.png";
                            hl.Attributes.Add("title", "Create AP");
                        }).GetHtml()
 </div>

@Html.DevExpress().PopupControl(settings =>
{
    settings.Name = "pcCreateAP";
    settings.Width = 700;
    settings.AllowResize = true;
    settings.AllowDragging = true;
    settings.CloseAction = CloseAction.CloseButton;
    settings.CloseOnEscape = true;
    settings.PopupAnimationType = AnimationType.Fade;
    settings.HeaderText = "Create Health Action Plan";
    settings.Modal = true;
    settings.PopupHorizontalAlign = PopupHorizontalAlign.WindowCenter;
    settings.PopupVerticalAlign = PopupVerticalAlign.TopSides;
    settings.SetContent(() =>
    {
        Html.Action("CreateAP", "AP", null);
    });
}).GetHtml()

弹出的cshtml也包含一个

代码语言:javascript
复制
Html.DevExpress().Button(btnSet =>
    {
        btnSet.Name = "btnCreateAp";
        btnSet.ControlStyle.CssClass = "button";
        btnSet.Width = Unit.Percentage(100);
        btnSet.RouteValues = new { Controller = "AP", Action = "CreateAP" };
        btnSet.Text = "Create";
        btnSet.UseSubmitBehavior = true;
    }).GetHtml();

这两个动作都得到了HttpPost,ValidateAntiForgeryToken的装饰。我不知道这是DevExpress问题还是一些基本的HTML.

EN

回答 2

Stack Overflow用户

发布于 2016-06-10 13:58:46

您应该尝试在代码的第一行中显式指定Controller和Action方法。

@using (Html.BeginForm())替换为

代码语言:javascript
复制
@using (Html.BeginForm("YourAction", "YourController", FormMethod.Post))
{

} 
票数 0
EN

Stack Overflow用户

发布于 2016-06-13 12:38:17

解决方案是在控制器中使用与get函数不同的名称。在我的例子中,我刚刚将它重命名为CreateAPSave,现在当保存初始表单时不调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37748826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档