Html.RenderPartial不生成值

时间:2012-06-15 14:11:54

标签: jquery asp.net-mvc-3 razor vb.net-2010 renderpartial

美好的一天,所有。

我知道这对于MVC而言是一个非常基本的问题,但我不能为我的生活得到@ Html.RenderPartial不给我错误。我正在使用VB.NET和Razor。我在网上找到的大多数例子都是用c#编写的,这对我来说并不难转换,但这个简单的例子让我感到难过。这是在我的索引视图中,由_Layout.vbhtml呈现:

@Section MixPage
    @Html.RenderPartial("_MixScreen", ViewData.Model)
End Section

上面的表达式不会产生值。

今天早上我已经看了很长一段时间,我所采用的例子如下:

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

Getting a Partial View's HTML from inside of the controller

最终,我要做的是从控制器返回并更新模型到部分视图:

    Function UpdateFormulation(model As FormulationModel) As ActionResult
        model.GetCalculation()
        Return PartialView("_MixScreen", model)
    End Function

并且正在从javascript中的表达式调用该控制器:

function UpdateResults() {
    jQuery.support.cors = true;
    var theUrl = '/Home/UpdateFormulation/';
    var formulation = getFormulation();
    $.ajax({
        type: "POST",
        url: theUrl,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify(formulation),
        success: function (result, textStatus) {
            result = jQuery.parseJSON(result.d);
            if (result.ErrorMessage == null) {
                FillMixScreen(result);
            } else {
                alert(result.ErrorMessage);
            }
        },
        error: function (xhr, result) {
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);
        }
    });
}

如果有更好的方法将此更新的模型返回到视图并且仅更新此局部视图,我会全神贯注。但这个问题的前提是:为什么RenderPartial没有产生价值?

2 个答案:

答案 0 :(得分:10)

Html.RenderPartial直接写入响应;它不会返回值。因此,您必须在代码块中使用它。

@Section MixPage
    @Code
        @Html.RenderPartial("_MixScreen", ViewData.Model)
    End Code
End Section

你也可以使用没有代码块的Html.Partial()做同样的事情,因为Partial()会返回一个字符串。

@Section MixPage
    @Html.Partial("_MixScreen", ViewData.Model)
End Section

答案 1 :(得分:1)

嗯,来自客户端的问题是你希望你的客户端中有一个html而不是Json,请记住返回一个视图,基本上你要返回视图编译,这是{{1}将结果中预期的数据类型更改为html

html

我还建议你使用方法load,它是ajax的简短版本,并且总是假设它是一个html的预期结果,并且它附加到你需要的元素的主体上< / p>

二。如果你想加载部分从你的布局做这样的

$.ajax({
    type: "POST",
    url: theUrl,
    contentType: "application/json",
    dataType: "html",
    data: JSON.stringify(formulation),
    success: function (result, textStatus) {
        result = jQuery.parseJSON(result.d);
        if (result.ErrorMessage == null) {
            FillMixScreen(result);
        } else {
            alert(result.ErrorMessage);
        }
    },
    error: function (xhr, result) {
        alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
        alert("responseText: " + xhr.responseText);
    }
});