2012-07-10 54 views
0

我想使用ajax更新局部视图,但由于某种原因失败。为什么我的JQuery函数在尝试渲染局部视图时失败

控制器:

[HttpPost()] 
public ActionResult DisplaySections(string id) 
{ 
    DataContext db = new DataContext(); 

    var Data = (from p in db.vwData.Where(a => a.CourseId == id) 
          group p by p.SectionId into g 
          select g.Key).ToList(); 

    return PartialView("DisplaySections", Data); 
} 

阿贾克斯:

$('#CourseId').focusout(function (e) { 
    e.preventDefault(); 
    var link = '/Course/DisplaySections'; 
    $.ajax({ 
     type: 'POST', 
     url: link, 
     data: { id: $('#CourseId').val() }, 
     dataType: 'html', 
     success: function (result) { 
      $("#partial").html(result); 
     }, 
     error: function (result) { 
      alert("Failed") 
     } 
    }); 
}); 

部分:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %> 
<%@ Import Namespace="Course.Models" %> 

<table> 
<% if (Model != null) 
      foreach (var item in Model) { 
      if (item == null) continue; %> 

     <tr> 
      <td> 
       <%: item.SectionId%> 
      </td> 
      <td> 
       <%: item.Description%> 
      </td>    
     </tr> 

    <% } %> 

    </table> 

母版视图:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 
<%@ Import Namespace="Course.Models" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Course - Sections 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<div style="text-align: left; height: 202px;"> 
<table> 
<tr> 
    <th>Course Id</th> 
    <td><input type="text" name="CourseId" id="CourseId"/></td> 
</tr> 
<tr> 
    <th>Course Name</th> 
    <td><input type="text" name="CourseName" id="CourseName"/></td> 
</tr> 
</table> 

<div id="partial"> 
<% Html.RenderPartial("DisplaySections"); %> 
</div> 

</div> 

</asp:Content> 
+0

它是如何失败? – MNGwinn 2012-07-10 21:30:47

+0

**如何失败?打开Firebug控制台,看看是否有任何错误。这可能是一百万件事情。没有jQuery?服务器正在返回错误500?您发布的网址与您的期望不符? – 2012-07-10 21:31:07

+0

@MNGwinn它只要执行控制器动作,我甚至可以看到数据,当我将鼠标悬停在控制器动作中的“数据”上,但是它将“错误”返回给jQuery函数。难道它控制器行动(列表)和jQuery(html)中的数据类型不匹配? – user793468 2012-07-10 21:46:23

回答

1

您的部分视图充满了错误。

你的控制器动作传递一个List<string>(或List<int>取决于SectionId属性的类型),以这样的观点:

[HttpPost()] 
public ActionResult DisplaySections(string id) 
{ 
    DataContext db = new DataContext(); 

    List<string> data = 
     (from p in db.vwData.Where(a => a.CourseId == id) 
     group p by p.SectionId into g 
     select g.Key).ToList(); 

    return PartialView("DisplaySections", data); 
} 

,但在局部视图您正在尝试使用一些item.SectionIditem.Description

开始通过使您的视图强类型,让你的智能感知已经显示你什么,你可以和不能在编译时使用:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<List<string>>" 
%> 

<table> 
    <% if (Model != null) { %> 
     <% foreach (string item in Model) { %> 
      <% if (item == null) continue; %> 
      <tr> 
       <td> 
        <%: item %> 
       </td> 
      </tr> 
     <% } %> 
    <% } %> 
</table> 
+0

当渲染局部视图时,我通过在父视图中传递“模型”来获得部分视图。我的方式可以接受吗?或者我应该追求强大的解决方案? – user793468 2012-07-11 17:10:12

+0

你应该追求强大的解决方案。 – 2012-07-11 17:12:48

0

让我们尝试几件事:

  1. 尝试不指定数据类型。只是把它抛开。
  2. 尝试使url:指向绝对路径(使用Url.Action也许?)而不是相对的路径。
相关问题