PartialView делает то, что я думаю, что должен (но не делает)? - PullRequest
3 голосов
/ 08 февраля 2009

У меня есть div на странице ASP.NET MVC, который я хотел бы заполнить динамически (по запросу пользователя), используя 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 с пустым ответом).

Кроме того, команда Debug.Print в файле .ascx создает выходные данные, поэтому вызов jQuery и метод PartialView определенно запускаются.

Для чего используется PartialView (и PartialViewResult), и что я должен делать вместо этого?

Заранее спасибо.

О, и он использует Кандидата в релиз ... если это имеет значение.

Ответы [ 5 ]

2 голосов
/ 09 февраля 2009

В одном из самых причудливых исправлений, которые я нашел, может показаться, что (в моем случае) добавление

<html><head><title></title></head><body>

перед кодом управления пользователем, а

</body></html>

после кода управления пользователем, обходит проблему. Без них элемент управления ничего не возвращает.

Теперь вполне возможно, что это связано с какой-то странной проблемой, вызванной развитием сайта из Preview 3 -> Preview 4 -> Preview 5 -> Beta -> RC1, поэтому я не удивлюсь, если я ЕДИНСТВЕННЫЙ ЧЕЛОВЕК В МИРЕ получает эту проблему, но вот она у вас.

Если кто-нибудь найдет лучший ответ, пожалуйста, добавьте его сюда ...

1 голос
/ 08 февраля 2009

Это работает здесь. Вы уверены, что jquery load () вызывается?

0 голосов
/ 10 февраля 2009

Это просто работает для меня. Я создал образец

Вид

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

Надеюсь, это поможет.

0 голосов
/ 10 февраля 2009

Привет, Даррен, можешь попробовать Fiddler2 и посмотреть, что он показывает как ответ? У меня есть ощущение, что если частичное представление выполняется, как вы сказали, это может не быть проблемой с MVC. Вот кое-что, чтобы попытаться свести проблему к своей сути.

Когда вы делаете прямой запрос к / MyController / GetList, возвращает ли он правильный HTML?

Добавьте файл "foo.html" на свой веб-сайт, содержащий вывод HTML, который вы ожидаете от частичного. Измените код jQuery, чтобы вместо него запросить foo.html:

$('#MyDiv').load("/foo.html");

Это работает? Одна вещь, которую вы можете сделать с помощью метода load в jQuery, это предоставить CSS-селектор. Таким образом, в качестве обходного пути, вы можете обернуть партиал заголовком HTML, тегами body, как вы делали в другом ответе, но затем добавить селектор CSS в метод load, чтобы получить только ту часть, которая вам нужна, например:

$('#MyDiv').load("/MyController/GetList #stuff-i-want");
0 голосов
/ 08 февраля 2009

Я бы не хотел спрашивать, но вы где-нибудь включаете скрипт jquery? Меня много раз спрашивали другие, почему jQuery не работает с их проектом MVC. Решением является добавление тега на главную страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...