ASP.NET MVC - 如何使用AJAX呈现PartialView?

3
今天早些时候,我发布了另一篇帖子,在那里@Darin Dimitrov帮助了我很多,但是我又卡住了......我的JavaScript调用AddWebsite ActionResult,它按照应有的方式执行它的工作,但是$.ajax()中的错误函数总是在触发。
return PartialView(ListPartialView, MapUserToViewModel); 

不是有效的JSON格式。

我遇到过一些例子,人们使用类似于

RenderPartialViewToString(partialview, model);

将其放入JSON对象中...但如果您问我,这只是太"hackish"了...有没有更容易实现这个的方法呢?

... 代码如下:

// DashboardController.cs

[HttpPost]
public ActionResult AddWebsite(CreateWebsiteViewModel website)
{
    if (!ModelState.IsValid)
    {
        throw new HttpException(400, "Client-side validation failed.");
    }

    if (string.IsNullOrWhiteSpace(website.URL))
    {
        throw new ArgumentNullException("URL", "The URL cannot be empty nor contain only whitespaces.");
    }

    using (_session.BeginTransaction())
    {
        _session.Query(new AddWebsite(_contextProvider.GetUserSession.UserId, website.URL));
        _session.Transaction.Commit();
    }

    return PartialView(ListPartialView, MapUserToViewModel);
}

// 我的Js.js

$("#testform").live('submit', function () {

    var test = { URL: $("#URL").val() };

        $.ajax({
            url: "/Dashboard/AddWebsite",
            type: "POST",
            data: JSON.stringify(test),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert("TRIG");
                $("#content").html(data);
            },
            error: function () {
                alert("Error");
            }
        });

    return false;
});

提前感谢您!

2个回答

4

在您的情况下,我认为问题出在您的javascript代码上。您指定了dataType(这是该函数期望解析响应的内容类型)为json。根据您发布的操作,您应该将dataType指定为html,这将解决您的问题。这样做没有任何问题(您不必为所有内容使用JSON格式)。


1

简单数据

你为什么要在第一次设置dataTypecontentType呢?由于你的test对象非常简单,你可以直接提供它,Asp.net MVC会消费它而不会出现任何问题,并返回你的局部视图。

复杂数据

如果你的对象更加复杂,那么你可以使用一个不同的jQuery插件,这将使得发送复杂的JSON对象成为可能,而无需进行字符串化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接