gpt4 book ai didi

asp.net-mvc - 根据单击的提交按钮将表单发布到不同的 MVC post 操作

转载 作者:行者123 更新时间:2023-12-03 05:49:34 25 4
gpt4 key购买 nike

我正在使用 ASP.Net MVC 4。我在一个 View 上有多个按钮。目前我正在调用相同的操作方法;我使用 name 属性来区分单击的按钮。

@using (Html.BeginForm("Submit", "SearchDisplay", new { id = Model == null ? Guid.NewGuid().ToString() : Model.SavedSearch }, FormMethod.Post))
{
<div class="leftSideDiv">
<input type="submit" id="btnExport" class="exporttoexcelButton"
name="Command" value="Export to Excel" />
</div>

<div class="pageWrapperForSearchSubmit">
<input type="submit" class="submitButton"
value="Submit" id="btnSubmitChange" />
</div>
}

// Action

    [HttpPost]
public ActionResult Submit(SearchCostPage searchModel, string Command)
{
SessionHelper.ProjectCase = searchModel.ProjectCaseNumber;

if (string.Equals(Command, Constants.SearchPage.ExportToExcel))
{

}
}

问题

  1. 有没有办法在不同的按钮点击时定向到不同的 POST 操作方法(无需自定义路由)?
  2. 如果没有自定义路由就没有办法,那么如何使用自定义路由呢?

引用文献:

  1. Jimmy Bogard - Cleaning up POSTs in ASP.NET MVC

最佳答案

您可以以不同的方式选择必须发布表单的 URL(以及调用的操作),具体取决于浏览器支持:

这样你就不需要在服务器端做任何特殊的事情。

当然,您可以在 Razor 中使用 Url 扩展方法来指定表单操作。

对于支持 HMTL5 的浏览器:只需定义您的提交按钮,如下所示:

<input type='submit' value='...' formaction='@Url.Action(...)' />

对于较旧的浏览器我建议使用像这样的不显眼的脚本(将其包含在您的“主布局”中):

$(document).on('click', '[type="submit"][data-form-action]', function (event) {
var $this = $(this);
var formAction = $this.attr('data-form-action');
$this.closest('form').attr('action', formAction);
});

注意:此脚本将处理页面中具有 type=submitdata-form-action 属性的任何元素的点击。发生这种情况时,它会获取 data-form-action 属性的值,并将包含表单的操作设置为此属性的值。由于它是委托(delegate)事件,因此即使对于使用 AJAX 加载的 HTML 也适用,无需采取额外的步骤。

然后,您只需向按钮添加一个带有所需操作 URL 的 data-form-action 属性,如下所示:

<input type='submit' data-form-action='@Url.Action(...)' value='...'/>

请注意,单击按钮会更改表单的操作,之后浏览器会将表单发布到所需的操作。

如您所见,这不需要自定义路由,您可以使用标准的 Url 扩展方法,并且在现代浏览器中无需执行任何特殊操作。

关于asp.net-mvc - 根据单击的提交按钮将表单发布到不同的 MVC post 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21116999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com