Загрузка DIV с динамическим MvcHtmlString

I've created a div inside a web page that needs to be filled through the jqueryload функция.

<div id="foo">
</div>

This is the call that should fill the div (the call is triggered by some other client side event):

$("#foo").load("/someControllerName/someActionName" + " #foo");

someActionName метод:

public MvcHtmlString someActionName()
{
    //some other irrelevant code
    MvcHtmlString returnString = new MvcHtmlString("@Html.ActionLink(" + someFileName + ", \"Download\", new { request = \"" + sameFileId + "\"})");
}

I'm having trouble at actually filling the foo div with the content of the MvcHtmlString вернулся someActionName, at the point where the both someFileName а также sameFileId имеют действительные значения. Что я делаю неправильно? Это то, что я пытаюсь достичь даже возможно?

Спасибо!

1 ответ

Решение

Если вы хотите запустить динамическое выражение бритвы и встроить HTML в ваш DIV, вы делаете это неправильно. MvcHtmlString просто закодирует строку выражения и вернет ее клиенту.

Это действие вернет выражение Razor, которое не доступно вашему коду jQuery. Razor - это серверный язык, исполняемый механизмом просмотра, поэтому единственный способ вернуть используемую ссылку HTML из вашего действия - выполнить динамическое выражение, содержащееся в MvcHtmlString используя механизм просмотра на сервере и верните обратно строку.

Один очень простой способ выполнить ваше динамическое выражение бритвы это использовать Partial Views, Ваше действие вернет только частичное представление:

public PartialViewResult someActionName()
{
    var url = "/Contact";
    return PartialView("UrlView", url);
}

Ваш вид будет отображать ваш динамический URL:

@model String
@{
    Layout = null;
}

@Html.ActionLink("Some Link", Model)

И тогда вы можете легко встроить этот динамический URL в ваш div, используя $("#foo").load()

Если это слишком много кода для вас, вы можете попробовать использовать проект с открытым исходным кодом под названием RazorEngine для выполнения ваших операторов бритвы, но я нашел его довольно глючным.

http://razorengine.codeplex.com/

Другие вопросы по тегам