gpt4 book ai didi

asp.net-mvc-3 - MVC路由问题

转载 作者:行者123 更新时间:2023-12-04 06:30:46 26 4
gpt4 key购买 nike

我的页面上有一个搜索表单,我想使用 GET 提交表单。搜索表单如下所示:

    @using (Html.BeginForm("List", "Search", FormMethod.Get))
{
@Html.HiddenFor(model => model.CategoryName)
@Html.HiddenFor(model => model.RegionName)

<table class="plain">
<tr>
<td>From</td>
<td>@Html.TextBoxFor(model => model.FromDate)</td>
</tr>
<tr>
<td>To</td>
<td>@Html.TextBoxFor(model => model.ToDate)</td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="Search" value="Search" />
</td>
</tr>

</table>
}

使用这样的 View 模型:
public class SideNavModel
{
public string CategoryName { get; set; }
public string RegionName { get; set; }
public string FromDate { get; set; }
public string ToDate { get; set; }
}

我有这样设置的路线:
    routes.MapRoute(
"Search2",
"Search/{CategoryName}/{RegionName}/{FromDate}/{ToDate}",
new { controller = "Search", action = "List", CategoryName = "All", RegionName = "All", FromDate = "", ToDate = "" });

routes.MapRoute(
"Search1",
"Search/{CategoryName}/{RegionName}",
new { controller = "Search", action = "List", CategoryName = "All", RegionName = "All" });

所以,当我实际进行搜索时,URL 被发送到:
/Search?CategoryName=All&RegionName=SomeRegion&FromDate=20110301&ToDate=20110317

我真正想要的地方:
/Search/All/SomeRegion/20110301/20110317

我不确定它是否重要,但按照这种设置方式,搜索需要出现在每一页上。所以,在 _layout.cshtml 'masterpage' 中,我有这个:
@{Html.RenderAction("LoadNavigationSide");}

在 BaseController 中,这个:
public PartialViewResult LoadNavigationSide(SideNavModel model)
{
// other code
// ...
return PartialView("NavigationSide", model);
}

(它需要像这样,因为它不仅仅是返回模型 - 所以它不能是一个简单的 @Html.Partial("NavigationSide") 调用)

最佳答案

如果您使用 method="GET"在您的表单中,HTML 规范指出用户代理应该向 action 中使用的 url 发送一个 GET 请求。属性并附加值作为查询字符串参数。

如果您使用 method="POST"在您的表单上,HTML 规范指出用户代理应该向 action 发送一个 POST 请求。属性并在 POST 请求正文中写入表单字段的值。

结论:使用纯 HTML 是不可能实现的。

实现此目的的一种方法是使用 javascript 并订阅 onsubmit表单的事件,构建请求 url 并在取消默认行为后手动重定向到它。 jQuery 示例:

$('form').submit(function() {
var url = this.action + '/' + $('#FromDate').val() + '/' + $('#ToDate').val();
window.location.href = url;
return false;
});

但就我个人而言,我会坚持使用 POST 动词。

关于asp.net-mvc-3 - MVC路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5439742/

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