我在网页中创建了一个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
内容someFileName
,sameFileId
和{{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()
如果这对你来说代码太多,或者你可以尝试使用一个名为RazorEngine的开源项目来执行你的razor语句,但我发现它非常错误。