【问题标题】:Partial view does not render on dropdown postback部分视图不会在下拉回发中呈现
【发布时间】:2011-08-23 06:08:20
【问题描述】:

我正在使用 Ajax 表单回发我的表单以在 MVC 中呈现部分视图。以下是供您参考的代码:

引发 dorpdown 事件的 Java 脚本:

jQuery(document).ready(function () {

    $("#ReviewPeriodID").change(function () {

        var f = $("#Form1");
        var action = f.attr("action");
        var serializedForm = f.serialize();
        $.post(action, serializedForm,
            function () 
            { 
                alert("Finished! Can do something here!") 
            });
    });

});

上述代码完美执行,并在回发时调用特定操作。

控制器动作(回发):

[HttpPost]
    public ActionResult Welcome(HomeViewModel model)
    {
        String userName = this.GetUserName();

        HomeViewModel homeViewModel = GetHomeViewModel(userName, null);
        Review review = this.OPService
                            .GetReviewDetails(model.ID, model.Employee.ID);
        homeViewModel.Review = review;

        return View(homeViewModel);
    }

下面是一个视图:

查看代码(一切都在 Ajax 表单下):

@using (Ajax.BeginForm("Welcome", "Home", new AjaxOptions 
  { InsertionMode = InsertionMode.Replace, UpdateTargetId = "evaDetails" }, 
  new { id = "Form1" }))

{

@Html.HiddenFor(m => m.Employee.ID);
@Html.HiddenFor(m => m.Employee.FirstName);
@Html.HiddenFor(m => m.Employee.LastName);
@Html.HiddenFor(m => m.MinimumManagerCount);


<table class="tablestyle">
    <tr>
        <td class="highlightTD" colspan="2">
                      Step 1. Please select a review period</td>
    </tr>
    <tr>
        <td class="firstColumnTD" style="width:30%;" >Review Period</td>
        <td>@Html.DropDownListFor(m => m.ReviewPeriodID, Model.ReviewPeriods, 
                 "-- Select Review Period --")</td>
    </tr>
</table>


<div id="evaDetails">
@{
    if (Model.Review != null)
    {
        <table class="tablestyle">
            <tr>
                <td class="highlightTD">Reviews</td>
            </tr>
            <tr>
                <td>
                    @Html.Partial("_Evaluations", Model.Review)
                </td>
            </tr>
        </table>
    }
}
</div>
}

一切都完美执行,但它不在浏览器上显示内容。谁能帮我找出我在这里做错了什么?

【问题讨论】:

    标签: c# ajax asp.net-mvc razor


    【解决方案1】:

    我可以看到两个问题:

    1. 您返回的是常规视图,而不是部分视图。
    2. 您没有对 $.post 回调中的操作结果执行任何操作。

    【讨论】:

    • 感谢您的 cmets。我正在返回一个常规视图,其中包含一个我将其传递给局部视图的对象:'@Html.Partial("_Evaluations", Model.Review)' 是正确的方法吗?
    • @Anil - 不,我不这么认为。再说一次,我不确定您要达到什么目标,或者我的答案会更全面,而不仅仅是简单的观察。
    • 我正在创建一个视图,它将向用户显示按需值,例如我在视图顶部有两个下拉列表,即州详细信息和城市详细信息。在选择任一下拉值时,我将向用户显示信息。如果用户选择州,那么不同的信息集和用户选择城市,那么不同的信息集。由于不同类型的信息,我创建了两个单独的视图,并在下拉更改时加载它们。如果您需要更多详细信息,请告诉我。感谢您为解决我的查询所做的努力(我对 MVC 有点陌生)
    • @Anil - 没有问题。如果您想要的只是异步加载的州/城市列表,那么即使使用部分加载也没有意义 - 只需从控制器(这是城市/州列表)返回 JsonResult,然后使用 jQuery 和绑定到下拉菜单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多