使用动态MvcHtmlString加载DIV

时间:2014-11-26 11:42:54

标签: jquery asp.net-mvc mvchtmlstring

我在网页中创建了一个div,需要通过jquery load函数填充。

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

这是应该填充div的调用(调用由其他一些客户端事件触发):

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

someActionName方法:

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

我实际填写foo div时遇到MvcHtmlString返回的someActionName内容someFileNamesameFileId和{{1}}具有有效值。我究竟做错了什么?我试图实现的是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想运行动态剃刀表达式并将HTML嵌入到DIV中,那么您做错了。 MvcHtmlString将只编码表达式字符串并将其返回给客户端。

该操作将返回您的jQuery代码无法理解的Razor表达式。 Razor是一个可由视图引擎执行的服务器端语言,因此从您的操作返回可用HTML链接的唯一方法是使用服务器上的视图引擎执行MvcHtmlString中包含的动态表达式并返回一个字符串。

执行动态剃刀表达式的一种非常简单的方法是使用Partial Views。您的操作只会返回部分视图:

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

您的视图会呈现您的动态网址:

@model String
@{
    Layout = null;
}

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

然后,您可以使用$("#foo").load()

轻松地将动态网址嵌入到您的div中

如果这对你来说代码太多,或者你可以尝试使用一个名为RazorEngine的开源项目来执行你的razor语句,但我发现它非常错误。

http://razorengine.codeplex.com/