我在ASP.NET MVC页面上有一个div,我想使用jQuery动态填充(在用户请求下)。我目前有jQuery向我的控制器发出JSON调用,它返回一个JSON对象,然后我使用Javascript手动构建HTML,然后将其放在div中。
等一下。让控制器自己生成HTML(使用自定义控件(.ascx文件)),然后只返回要放在div中的字符串会不会更容易?
更容易,更精神!
我目前的尝试涉及以下javascript:
$('#MyDiv').load("/MyController/GetList");
调用以下控制器方法:
public PartialViewResult GetList()
{
... create model ...
var result = PartialView("CategoryList", model);
return result;
}
问题是,我完全没有得到控制器的回应。它被正确调用(由断点证明),但Firebug甚至没有在Net视图中注册对控制器的调用(尽管调用确实显示了Firebug控制台窗口,并显示空白响应)。
此外,.ascx文件中的Debug.Print命令会产生输出,因此jQuery调用和PartialView方法肯定会触发。
什么是PartialView(和PartialViewResult)用于,我应该做什么而不是这个?
提前致谢。
哦,它正在使用Release Candidate ...如果这有所作为。
答案 0 :(得分:2)
在我发现的一个最离奇的修补程序中,似乎(在我的情况下),添加
<html><head><title></title></head><body>
用户控制代码前的和
</body></html>
用户控制代码后,解决问题。没有这些,控制就不会返回任何内容。
现在,完全有可能这是由于网站从预览3演变引起的一些奇怪问题 - &gt;预览4 - &gt;预览5 - &gt; Beta - &gt; RC1,所以如果我是世界上唯一一个得到这个问题的人,我不会感到惊讶,但是你有它。
如果有人确实找到了更好的答案,请在此处添加...
答案 1 :(得分:1)
它适用于此。 你确定调用了jquery load()吗?
答案 2 :(得分:0)
我不想问,但是你在某处包含了jquery脚本吗?我被其他人多次询问为什么jQuery没有使用他们的MVC项目。解决方案是将标签添加到其母版页。
答案 3 :(得分:0)
嘿Darren,您可以尝试使用Fiddler2并查看它显示的响应吗?我有一种感觉,如果正在执行部分视图,正如您所说,这可能不是MVC的问题。这是尝试将问题简化为核心的东西。
当您对/ MyController / GetList发出直接请求时,它是否返回正确的HTML?
在您的网站上添加“foo.html”文件,其中包含您希望从部分输出的HTML输出。更改您的jQuery代码以请求foo.html:
$('#MyDiv').load("/foo.html");
这有用吗? 你可以用jQuery中的load方法做的一件事是提供一个CSS选择器。因此,作为一种解决方法,您可以像在其他答案中一样使用HTML头部,body标签包装部分,但是然后将一个CSS选择器添加到load方法中以仅抓取您想要的部分:
$('#MyDiv').load("/MyController/GetList #stuff-i-want");
答案 4 :(得分:0)
这对我有用。我创建了一个样本
视图
<div id="sam"></div>
<% var url = Url.Action("GetList"); %>
<script type="text/javascript">
$(document).ready(function() {
$('#sam').load('<%=url%>');
});
</script>
部分视图 - GetList.ascx
<%@ Control Language="C#" Inherits="ViewUserControl<IEnumerable<string>>" %>
<ul>
<% foreach (var s in Model) { %>
<li><%=Html.Encode(s)%></li>
<% } %>
</ul>
控制器
[AcceptVerbs(HttpVerbs.Get)]
public PartialViewResult GetList()
{
return PartialView(new[] { "Hello", "Foo", "Bar" });
}
希望这有帮助。