4

大家好。

我知道就 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

从控制器内部获取部分视图的 HTML

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

    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 不产生值?

4

2 回答 2

12

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
于 2012-12-22T05:26:48.917 回答
1

好吧,来自客户端的问题是您期望html客户端中不是 Json,请记住返回视图,基本上您正在返回视图编译,这是html将结果中预期的数据类型更改为 html

$.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);
    }
});

另外我建议您使用方法load,它是 ajax 的简短版本,并始终假定预期结果是 html 并且它附加到您需要的元素的主体

第二。如果您想从您的布局中加载部分内容,请这样做

 //note's that i'm calling the action no the view
 @Html.Action("UpdateFormulation","yourController", new { model = model}) //<--- this is code in c# don't know how is in vb
于 2012-06-15T15:16:37.773 回答