2012-09-24 66 views
0

我正在開發一個MVC3應用程序。我認爲我想要移動到我的控制器,我有一些邏輯。它根據模型的某些方面動態顯示ActionLink。 Html.ActionLink的linkText和actionName參數是唯一可以不同的東西。我加入到我的控制器的方法會返回與串的JsonResult爲LINKTEXT和actionName:來自JsonResult的動態ActionLink?

[AcceptVerbs(HttpVerbs.Get)] 
public JsonResult GetActionButton(int id) 
{ 
    string action = null; 
    string text = null; 

    // Snipped stuff that sets action and text 

    return Json(new 
    { 
     buttonAction = action, 
     buttonText = text 
    }); 
} 

我在哪裏可以調用這個方法來創建使用結果的鏈接?

+0

這個方法是通過ajax調用,還是在視圖中使用服務器端,或兩者兼而有之? – MrOBrian

+0

@MrOBrian - 這就是我想要弄清楚的 - 不知道在哪裏調用它的正確位置是能夠在創建鏈接時參考其結果。 –

+0

那麼,因爲它是一個JsonResult,我會假設你通過客戶端的ajax調用它,但是你提到了想要將一些邏輯從視圖移動到Html.ActionLink的控制器上,這將在服務器上。如果鏈接根據模型不同而不同,那麼您可能希望在服務器端執行所有操作,而不使用json,但如果鏈接根據客戶端發生的事情而改變,那麼您將需要使用ajax來返回json結果。 – MrOBrian

回答

2

對於鏈接生成從控制器看UrlHelper Methods,最好使用Action接收正常的網址。在客戶端上使用jquery,你可以創建如下鏈接:

$('<a>').attr('href', data.buttonAction).text(data.buttonText) 
+0

這是IMO的最佳路線,當我需要代碼中的「呈現」網址時,這是我之前使用過的。 – Gromer

1

多個ID來自哪裏,我猜在視圖模型?

也許使用jQuery/AJAX的文件準備:

$(document).ready(function() { 
    // Handler for .ready() called. 
    // AJAX call to GetActionButton for each enumeration over the ID's in the view model 
}); 
1

我thiink你想要一個HTML助手。

public static MvcHtmlString MyActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName) 
    { 
     string actionLinkHtml = string.Format("<a href=\"/{0}/{1}\">{2}</a>", controllerName, actionName, linkText); 
     return new MvcHtmlString(actionLinkHtml); 
    } 

當然會有更多的代碼來設置你的變量,你的參數可能僅僅是因爲你有上述相同INT ID,但是這是基本的想法。

然後在視圖只需使用:

@Html.MyActionLink("link text", "action", "ctrlr")