我正在尝试将级联下拉列表添加到我网站上的页面。我已经按照http://www.mikesdotnetting.com/article/196/webmatrix-jquery-cascading-dropdown-lists中提供的示例进行了跟踪。唯一的变化就是我已经更改了变量名称以适应我的应用程序,因为我只希望在某些情况下存在功能(即创建新记录) ,围绕相关代码有一个if语句。
虽然我的第二个下拉列表在页面加载时被禁用(正如预期的那样),但是当第一个下拉列表项之一被选中时,它不会被启用。
我的怀疑是我没有正确地调用GetClients.cshtml(我的Mike的GetProducts.cshtml的变体),可能是由于这行:
$.getJSON('/GetClients/' + ActivityID, function (clients) {
没有找到正确的文件夹。
在一个理想的世界中,无论使用服务器版本还是localhost,我都可以使用Razor代字号(〜)强制显示正确的完整路径。但这似乎不是JavaScript中的一个选项。
GetClients.cshtml与包含我正在尝试控制的JS代码,HTML下拉列表等的cshtml文件位于同一文件夹中。有人能让我知道上面的代码是否引用了“隔壁”的文件,如果没有,我应该修改上面的代码行?
答案 0 :(得分:1)
您无法直接从Javascript调用视图,这就是为什么只需在ASP.NET MVC Controller中创建返回该视图的Action。
public MyController{
public ActionResult GetMyCoolCshtmlFile(){
return View("pathToMyCoolCshtml.cshtml");
}
}
并在JS中调用它:
$.get("/my/GetMyCoolCshtmlFile").done(function(yourMarkup){doWhatYouWantWithYourMarkup(yourMarkup);})
答案 1 :(得分:1)
您无法直接访问剃刀视图,您将通过操作方法访问它。
我认为问题是你得到404因为路径不正确。如果您打开浏览器控制台,则应该能够看到404错误。
使用Url.Action
html辅助方法生成操作方法的正确相对路径。
var url="@Url.Action("GetClients","YourcontrollerName")";
$.getJSON(url + ActivityID, function (clients) { });
当razor视图引擎执行此视图时,它将调用helper方法并使用该方法调用的输出(这是操作方法的正确相对路径)到javascript变量。无论您当前的页面/网址如何,此解决方案都可以使用。
假设您有一个名为GetClients
的操作方法,它接受一个id并以JSON格式返回客户端。
public ActionResult Getclients(int id)
{
// to do : Return a list of Clients as json
}
如果上面的代码位于剃刀视图中,它将起作用。如果您的代码位于extenal javascript文件中,请使用此post中解释的解决方案。
答案 2 :(得分:0)
如果您的GetClients.cshtml文件位于根目录下的文件夹中,则需要将该文件夹包含在传递给getJSON方法的URL中。例如,假设你的结构是这样的:
root
folder
GetClients.cshtml
CallingPage.cshtml
Default.cshtml
etc
传递给getJSON方法的网址应为/folder/getclients
以及您要传递的任何其他网址/查询字符串。