为什么这个URL数据传递工作但另一个不工作?

时间:2017-08-25 14:10:53

标签: javascript ajax asp.net-mvc

所以我在我看来有两个从javascript运行的ajax请求。

第一个视图实例:

var id = $(element).data("id");
var fullname = $(element).data("fullname");
var count = element.checked ? -1 : 1;
var rowIndex = $(element).closest("tr").index();

$.ajax({
    url: "@Url.Action("Edit", "Booking")/" + id + "?fullname=" + fullname + "&type=" + count,

第一个控制器实例:

[HttpPost]
public int Edit(int id, string fullname, string type)
{

这将从ajax请求中生成的url传输id,fullname和type变量值。完美!

第二个视图实例:

var type = "Table"; //this will be dynamically set later (could be type=table or type=new)
alert("[" + dateFrom + "] [" + dateTo + "]");

$.ajax({
    url: "@Url.Action("Create", "Booking")/" + type + "?datefrom=" + dateFrom + "&dateto=" + dateTo,

第二个控制器实例:

[HttpPost]
public JsonResult Create(string type, string dateFrom, string dateTo)
{

第二个实例生成了url(我认为)所以它指向/ Booking / Create / Table?datefrom = etc但是字符串类型变量总是为null,我怎样才能获取类型变量"表"在这种情况下?

我似乎无法理解为什么第一个实例有效,但是第二个实例并不像我看起来一样。

由于

1 个答案:

答案 0 :(得分:2)

这是因为您的路线定义。在路由表中,您具有如下所示的通用条目:

routes.MapRoute(
    "Default",                                              
    "{controller}/{action}/{id}",
     new { controller = "Home", action = "Index", id = "" }
);

看起来像"{controller}/{action}/{id}"的行是自动将提供的参数映射到漂亮的URL。请注意,最后一项名为id。如果您在URL中发送名为ID的参数,它将转换为漂亮的格式,例如Home/Index/4。相反,相同的网址会为控制器操作的4参数提供id的值。

您的第二个示例,您正在传递一个名为type的参数,但是,当它是实际URL的一部分时,您没有告诉MVC如何处理type参数的路由(例如controller/action/type )。因此,MVC不会将URL的最后部分映射到类型参数。

你可以做两件事之一。

1 - 创建一个新路由,查找名为type

的参数
routes.MapRoute(
    "MyTypeRoute",                                              
    "{controller}/{action}/{type}",
     new { controller = "Home", action = "Index", type = "" }
);

2 - 在构建网址时,与其他两个参数一样处理type参数

$.ajax({
    url: "@Url.Action("Create", "Booking")?type=" + type + "&datefrom=" + dateFrom + "&dateto=" + dateTo,