PartialView是否做了我认为应该做的事情(但没有)?

时间:2009-02-08 04:36:33

标签: jquery asp.net-mvc ajax

我在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 ...如果这有所作为。

5 个答案:

答案 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" });
}

希望这有帮助。