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