2012-09-24 1 views
0

MVC3 응용 프로그램에서 작업하고 있습니다. 내 견해로는 내 컨트롤러로 이동하고 싶은 논리가 있습니다. 모델의 특정 측면에 따라 ActionLink를 동적으로 표시합니다. Html.ActionLink의 linkText 및 actionName 매개 변수 만 다를 수 있습니다. 내가 링크 텍스트 및 actionName에 대한 문자열과 JsonResult을 반환 내 컨트롤러 방법을 추가 :JsonResult의 Dynamic 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이기 때문에, 나는 당신이 클라이언트로부터 아약스를 통해 호출하고 있다고 가정 할 것이지만, 서버에서 볼 수있는 Html.ActionLink에 대한 뷰로부터 컨트롤러의 로직을 옮기기를 원한다고 언급했다. 모델에 따라 링크가 다른 경우 서버 측에서 json을 사용하지 않고 모든 작업을 수행하려는 경우가 많지만 클라이언트에서 발생하는 상황에 따라 링크가 변경되는 경우 ajax를 사용하여 반환해야합니다. json 결과. – MrOBrian

답변

2

링크 생성을 위해 컨트롤러의 모습에서 UrlHelper Methods에서 정상 URL을 수신 Action을 사용하는 것이 좋습니다. jquery가있는 클라이언트에서 다음과 같은 링크를 만들 수 있습니다.

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

이것이 최고의 경로 인 IMO입니다. 코드에서 "렌더링 된"URL이 필요할 때 이전에 사용한 적이 있습니다. – 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

나는 당신이 HTML 도우미를 원하는 thiink.

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")