无法将PartialView返回到jQuery.ajax调用

Yas*_*sir 3 asp.net-mvc jquery json partial-views

背景:

我正在开发一个ASP.NET MVC应用程序,它在主页面上有3个部分(基于Razor引擎).第一部分具有用户填写的搜索条件列表.第二部分应该根据传入的数据显示ParameterParts列表.第三部分应该根据传入的数据显示规范列表.我需要在Controller中调用方法来填充我的第二和第三部分视图.

问题:

所有三个部分的父视图(index.cshtml)的代码

<div class="prepend-top span-24 last" id="searchPage">
    <div class="span-24 last">
        @Html.Partial("_Search")
    </div>
    <div class="span-24 last" id="parameterResults">
        @Html.Partial("_ParameterParts")
    </div>
    <div class="span-24 last" id="searchSpecResults">
        @Html.Partial("_Specifications")
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

第一部分代码(_Search.cshtml):

 // Post the object to the server using jQuery
 $.ajax({
     url: '@Url.Action("ParameterParts")',
     type: 'POST',
     dataType: 'html',
     data: dataToPass,
     error: function (data) { alert('Something Went Wrong'); },
     contentType: 'application/json; charset=utf-8',
     success: function (data) {
         alert('Success P');
         $("parameterResults").html(data);
     }
 });
Run Code Online (Sandbox Code Playgroud)

此代码使用dataToPass参数正确调用ParameterParts方法.

这是我用于控制器方法的代码:

[HttpPost]
public ActionResult ParameterParts(CriteriaViewModel vm)
{
    List<ParameterPart> parameterParts = new List<ParameterPart>();

    //Some logic to populate parameterParts using the passed in object

    return PartialView("_ParameterParts", parameterParts);
}
Run Code Online (Sandbox Code Playgroud)

第二部分代码:

@model IEnumerable<SmartPlex.Web.SmartPlex.ODataService.ParameterPart>

<table>
    <tr>
        <th>
            Part Number
        </th>
        <th>
            Description
        </th>
    </tr>
    @if (Model != null)
    {
        foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.PartNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Description)
                </td>

            </tr> 
         }                       
    }
</table>
Run Code Online (Sandbox Code Playgroud)

我不包括第3部分,因为它与第2部分相同.如何使用上述方法更新我的部分?

B Z*_*B Z 5

 dataType: 'dataToPass',
 data: json,
Run Code Online (Sandbox Code Playgroud)

dataType是您期望从服务器返回的数据类型.如果你要返回html,哪个不应该是json.

data是要发送到服务器的数据.

更新:

你错过了#,你的选择器不正确.如果您的HTML是这样的:

<div class="span-24 last" id="parameterResults">
  @Html.Partial("_ParameterParts")
</div>
Run Code Online (Sandbox Code Playgroud)

你的代码应该是这样的:

 $("#parameterResults").html(data);
Run Code Online (Sandbox Code Playgroud)

  • @Yasir np.我建议花一小时左右熟悉w/firebug或chrome dev工具.从长远来看,可以帮助你很多.能够在控制台中测试您的选择器/ js是一个实时的节省时间. (3认同)