Загрузка DIV с динамическим MvcHtmlString
I've created a div inside a web page that needs to be filled through the jquery
load
функция.
<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 для выполнения ваших операторов бритвы, но я нашел его довольно глючным.