Javascript 为什么这个URL数据传递工作,而另一个不工作?
因此,在我的视图中,我有两个从javascript运行的ajax请求 第一个视图实例:Javascript 为什么这个URL数据传递工作,而另一个不工作?,javascript,ajax,asp.net-mvc,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", "Bo
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)
{
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)
{
第一个控制器实例:
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)
{
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)
{
这将从ajax请求中生成的url传输id、fullname和type变量值。太好了
第二个视图实例:
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)
{
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)
{
第二个控制器实例:
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)
{
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。但是字符串类型变量总是空的,在这种情况下,我如何获取类型变量作为“Table”
我似乎无法理解为什么第一个实例有效,但是第二个实例无效,因为它在我看来是一样的
谢谢这是因为您的路线定义。在路由表中,您有一个如下所示的通用条目:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
看起来像“{controller}/{action}/{id}”
的行是自动将提供的参数映射到一个漂亮的URL的行。注意最后一项的名称为id
。如果在URL中发送一个名为ID的参数,它将被转换为漂亮的格式,如Home/Index/4
。相反,相同的URL将为控制器操作的id
参数提供4
的值
第二个例子是,您正在传递一个名为type的参数,但是,当type
参数是实际URL的一部分时,您没有告诉MVC如何处理它的路由(例如controller/action/type
)。因此,MVC没有将URL的最后一部分映射到类型参数
你可以做两件事中的一件
1-创建查找名为type的参数的新路由
routes.MapRoute(
"MyTypeRoute",
"{controller}/{action}/{type}",
new { controller = "Home", action = "Index", type = "" }
);
2-在构建URL时,将type
参数与其他两个参数一样对待
$.ajax({
url: "@Url.Action("Create", "Booking")?type=" + type + "&datefrom=" + dateFrom + "&dateto=" + dateTo,
我猜可能是因为路由规则。我猜ID被识别为一个潜在的路由参数,因此从URL路径中获取,而as类型不是,除非您修改了规则。你必须按照我想要的那样做。谢谢有什么理由让管制员在路线图上显示为“家”而不是“预订”吗?@Tatrick-没有,没有理由。您可以在新路线中将控制器完全更改为“预订”!