2013-06-29 22 views
1

我有显示与数据库中的项列表的保管箱,并呼吁change事件的控制器操作的一些代码。控制器将选定的条目作为一个字符串并返回一个新的视图(我认为这是我的问题),麻烦的是我认为旧视图仍然存在,因为新返回的视图从不显示。MVC3 AJAX回报新观点

我需要重新设计这个如果还是不行,我应该强行摧毁任何旧观点?

我的代码如下:

EditSchool观点:

@model namespace.Models.SchoolDetails 
@{ 
    ViewBag.Title = "EditSchool"; 
    Layout = "~/Views/AuthorisedAdmin/_LayoutAdmin.cshtml"; 
} 

<script src="@Url.Content("~/Scripts/chosen/chosen.jquery.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/bubble-popup-chosen-upload-functions.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     $("#School").change(function() { 
      var SelectedSchool = $('#School').val(); 
      $.ajax({ 
       url: '/AuthorisedAdmin/RetrieveSchool' 
       , type: 'POST' 
       , data: { School: SelectedSchool } 
       , success: function (data) { 
       } 
       , error: function (request, textStatus, errorThrown) { 
        alert(errorThrown.toString()); 
       } 
       , complete: function (request, textStatus) { 
       } 
      }); 
     }); 
    }); 
</script> 

<fieldset> 
    <legend>Select School</legend> 
    <div class="editor-field"> 
     @Html.DropDownList("School", ViewBag.RegisteredSchools as SelectList, namespace.Models.Helpers.LanguageSchoolsConstants.m_sDropdownDisplayText, 
      new 
      { 
       id = "School", 
       @class = "chosen", 
      }) 
    </div> 
</fieldset> 

@{ 
    if (null != Model) 
    { 
     @Html.Partial("Partial/EditSchoolPartial", Model) 
    } 
    else 
    { 
     @Html.Partial("Partial/NoSchoolSelected") 
    }  
} 

注意,局部视图(EditSchoolPartial)可能不是这里关注的问题,所以我不张贴代码。

感兴趣控制器方法:

EditSchool行动:

public ActionResult EditSchool() 
{ 
    List<string>kRegisteredSchools = DBHelperFunctionsSchool.Instance().GetRegisteredSchoolsNamesOnly(); 
    ViewBag.RegisteredSchools = new SelectList(kRegisteredSchools, "Name"); 
    SchoolDetails schoolDetails = null;//DBHelperFunctionsSchool.Instance().GetSchoolDetailsForName(kRegisteredSchools.FirstOrDefault()); 
    return View(schoolDetails); 
} 

RetrieveSchool动作(通过AJAX调用):

[HttpPost] 
    public ActionResult RetrieveSchool(string School) 
    { 
     SchoolDetails schoolDetails = null; 
     List<string> kRegisteredSchools = DBHelperFunctionsSchool.Instance().GetRegisteredSchoolsNamesOnly(); 
     ViewBag.RegisteredSchools = new SelectList(kRegisteredSchools, "Name"); 

     try 
     { 
      schoolDetails = new SchoolDetails(); 
      schoolDetails.School = DBHelperFunctionsSchool.Instance().GetSchoolForName(School); 
      DBHelperFunctionsSchool.Instance().PopulateSchoolDetailsSuppData(schoolDetails); 
      schoolDetails.ActionNameToExecuteOnFormSubmit = "EditSchoolDetails"; 
      schoolDetails.ControllerNameToExecuteOnFormSubmit = "AuthorisedAdmin"; 
     } 
     catch 
     { 
      schoolDetails = null; 
     } 
     finally 
     { 
     } 

     return View("EditSchool", schoolDetails); 
    } 
+0

你想重定向到你的观点在ajax命中您的控制器? – harrybvp

+0

是的 - 如果您的意思是,用户更改下拉选择,控制器然后查询选择并返回一个新的视图与相关的选择数据?谢谢 – Yos

回答

1

而是在平变化做AJAX的,下面做

$("#School").change(function() { 
     var SelectedSchool = $('#School').val(); 
     window.location='/AuthorisedAdmin/RetrieveSchool?School='+SelectedSchool; 
    }); 

注意:您可能必须提供完整路径网址而不是相对网址。

+1

谢谢。之后我意识到我的整个想法从根本上说是错误的,因为我正在尝试使用Ajax来完成一项不打算做的工作。尽管我很欣赏你的意见,但你的解决方案只针对我的目的。谢谢 – Yos