gpt4 book ai didi

jquery - ASP.NET MVC - 路由仍然让我感到困惑

转载 作者:行者123 更新时间:2023-12-01 08:26:45 25 4
gpt4 key购买 nike

我对 ASP.NET MVC 框架中的路由概念感到困难。例如,我有一个 Controller 方法:

public class UploadController : Controller
{
public ActionResult Index()
{
return View();
}

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetChildFolders(string id)
{

IEnumerable<MyModel> list = MyModelDataContext.GetChildFolders( new Guid(id) );

IEnumerable<SelectListItem> listitems = list.Select(row => new SelectListItem
{
Value = row.FolderID.ToString(),
Text = row.FolderName
});

return this.Json(listitems, JsonRequestBehavior.AllowGet);
}
}

这是我的路线:

routes.MapRoute(
"UploadRoute", // Route name
"Upload/{id}", // URL with parameters
new { controller = "Upload", action = "Index", id = UrlParameter.Optional
});

现在,如果我有两个 jQuery 函数:

function TeamChange1() {
var id = $('#TeamList').val();
$.getJSON('/Upload/GetChildFolders/' + id, null, function(data) {
bindOptionResults(data);
});
}

function TeamChange2() {
var id = $('#TeamList').val();
$.getJSON('/Upload/GetChildFolders', id, function(data) {
bindOptionResults(data);
});
}

TeamChange1() 将调用 GetChildFolders() 方法,并正确连接并填写 id 参数,但是,使用 TeamChange2() 时,id 参数在 Controller 方法中保持为空。这一定是路由问题导致的。有何解释?

最佳答案

这里实际上并不需要路由。事实上,默认路由 {controller}\{action}\{id} 已与您的 Controller 、操作和参数名称 (id) 匹配,因此定义了 UploadRoute 是多余的。

TeamChange2() 不起作用的原因是 id 是一个字符串,而不是一个对象。正确的代码是:

function TeamChange2() {
var id = $('#TeamList').val();
$.getJSON('/Upload/GetChildFolders', {id: id}, function(data) {
bindOptionResults(data);
});
}

这将传递 params 集合中的 id 而不是 url。 MVC 不关心并且仍然会绑定(bind),因为参数名称与 id 路由参数匹配。观察 FireBug 中的请求以查看差异。

此外,您可以将 Controller 操作中的 id 参数更改为 Guid 数据类型,这样您就不必在代码中执行 new Guid(id) .

关于jquery - ASP.NET MVC - 路由仍然让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240723/

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