ASP.NET MVC - 使用AJAX渲染PartialView?

时间:2011-01-30 17:54:28

标签: javascript asp.net asp.net-mvc ajax

今天早些时候我发布了另一篇文章,其中@Darin Dimitrov帮助了我很棒,但是我再一次被困... 我的javascript调用了AddWebsite ActionResult,它可以正常工作,但$ .ajax()中的错误函数始终在触发

return PartialView(ListPartialView, MapUserToViewModel); 

是无效的JSON。

我遇到过人们使用类似

之类的例子
RenderPartialViewToString(partialview, model);

并把它扔进一个JSON对象......但是如果你问我那就太“黑”了......是不是有更简单的方法来实现这个目标?

...代码:

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

// MyJs.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 个答案:

答案 0 :(得分:4)

在您的特定实例中,我认为问题出在您的javascript代码中。您将dataType(函数期望在响应中解析)指定为json。根据您发布的操作,您应该html作为dataType,它应该可以解决您的问题。这样做没有任何问题(你不必为所有事情使用JSON)。

答案 1 :(得分:1)

简单数据

为什么首先设置dataTypecontentType?由于您的对象test非常简单,您可以按原样提供它,它将由Asp.net MVC使用而不会出现任何问题,您将返回部分视图。

复杂数据

如果您的对象会更复杂,那么您可以使用不同的jQuery plugin来发送复杂的JSON对象而不会出现任何条件。