[英]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文件位於同一文件夾中。 有人可以讓我知道上面的代碼是否引用了“隔壁”文件,如果沒有,我應該修改上面的代碼行嗎?
您不能直接從Javascript調用視圖,這就是為什么只在返回該視圖的ASP.NET MVC Controller中創建Action的原因。
public MyController{
public ActionResult GetMyCoolCshtmlFile(){
return View("pathToMyCoolCshtml.cshtml");
}
}
並在JS中調用它:
$.get("/my/GetMyCoolCshtmlFile").done(function(yourMarkup){doWhatYouWantWithYourMarkup(yourMarkup);})
您將不會直接訪問剃刀視圖,而是將通過操作方法來訪問它。
我認為問題是您得到404,因為路徑不正確。 如果打開瀏覽器控制台,應該會看到404錯誤。
使用Url.Action
html幫助器方法可生成操作方法的正確相對路徑。
var url="@Url.Action("GetClients","YourcontrollerName")";
$.getJSON(url + ActivityID, function (clients) { });
當razor視圖引擎執行該視圖時,它將調用helper方法並將該方法調用的輸出(這是action方法的正確相對路徑)用於javascript變量。 無論您當前的頁面/ URL如何,此解決方案都將起作用。
假設您有一個名為GetClients
的操作方法, GetClients
方法接受一個id並以JSON格式返回客戶端。
public ActionResult Getclients(int id)
{
// to do : Return a list of Clients as json
}
如果上面的代碼在剃刀視圖中,它將起作用。 如果你的代碼是一個extenal的JavaScript文件中,使用該解決方案在此解釋后 。
如果您的GetClients.cshtml文件位於根目錄下的文件夾中,則需要將該文件夾包含在傳遞給getJSON方法的URL中。 例如,假設您的結構如下:
root
folder
GetClients.cshtml
CallingPage.cshtml
Default.cshtml
etc
傳遞給getJSON方法的url應該是/folder/getclients
加上要傳遞的所有其他URLData / querystrings。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.