所以我在我看来有两个从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,我怎样才能获取类型变量"表"在这种情况下?
我似乎无法理解为什么第一个实例有效,但是第二个实例并不像我看起来一样。
由于
答案 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,