从Ajax.BeginForm方法调用它时,我无法返回PartialView. Ajax调用如下.
@{ ViewBag.Title = "ChargeCode 1"; Layout = "~/Views/Shared/_Search_Layout.cshtml"; } <div class="span9"> <div class="page-header"> <h1>Charge Code1</h1> </div> @using (Ajax.BeginForm("SearchChargeCode1","ChargeCodeSearch",new AjaxOptions { UpdateTargetId = "searchResults",HttpMethod = "GET",InsertionMode = InsertionMode.Replace,})) { <input type="text" name="chargeCode1" class="input-medium search-query" /> <input type="submit" class="btn" value="Search" /> <button type="button" class="btn">Clear Results</button> } <table id="searchResults"> </table> </div>
在文本框中输入参数后,我单击Submit按钮,然后它转到ChargeCodeSearchController中的SearchChargeCode1 partialviewresult方法
public PartialViewResult SearchChargeCode1(string chargeCode1) { var chargecodes1 = db.ChargeCodes.Where(c => (!(String.IsNullOrEmpty(chargeCode1)) && c.NameChargeCode.Contains(chargeCode1))).Take(10); return PartialView("ChargeCodeSearch/_FindChargeCodeSearchResults1",chargecodes1); }
然后它应该返回在Views文件夹中的以下位置找到的_FindChargeCodeSearchResults1视图:
Views ->Shared ->->ChargeCodeSearch ->->->_FindChargeCodeSearchResults1
它不是!
我在PartialViewMethod中放了一个断点.它能够查询并查找结果列表并将其分配给chargecodes1变量,但在它逐步执行代码返回行之后,它只会返回到包含Ajax的视图,但它不会插入局部视图更新目标“searchResults”中的“ChargeCodeSearch / _FindChargeCodeSearchResults1”.
我在Shared下有一个FirmSearch和MemberSearch文件夹,它执行完全相同的功能,但具有不同的对象.那些工作.我不知道为什么这不起作用.
下面是应该返回的视图_FindChargeCodeSearchResult1的代码片段.创建此cshtml视图时,我将其创建为PartialView.我没有为它分配主页,也没有强烈地将它键入到ChargeCode对象中.
@model IEnumerable<MLSMAS.Models.ChargeCode> <table id="searchResults" class='table table-striped table-bordered table-condensed'> <thead> <tr> <th>ChargeCode ID</th> <th>ChargeCode Name</th> <th>ChargeCode Price</th> <th>Frequency</th> <th>ChargeCode Description</th> <th>Select</th> </tr> </thead> <tbody> @foreach (var item in Model) { <tr> <td> @Html.displayFor(modelItem => item.IdChargeCode) </td> <td> @Html.displayFor(modelItem => item.NameChargeCode) </td> <td> @Html.displayFor(modelItem => item.Price) </td> <td> @Html.displayFor(modelItem => item.Frequency) </td> <td> @Html.displayFor(modelItem => item.DescChargeCode) </td> <td> <a href="" onclick="setChargeCode1('@item.IdMember' '@item.Price');" class="setChargeCode1">Select</a> </td> </tr> } </tbody> </table> <script src="../../../Scripts/MLSMASJS.js" type="text/javascript"></script>
任何帮助或建议都非常感谢.
解决方法
由Ajax.BeginForm调用的Action不会返回任何partail视图,因为它需要捕获PartailView RenderHtml,因为PartailView的返回类型是字符串.
在控制器中
public string SearchChargeCode1(string chargeCode1) { var chargecodes1 = db.ChargeCodes.Where(c => (!(String.IsNullOrEmpty(chargeCode1)) && c.NameChargeCode.Contains(chargeCode1))).Take(10); string RenderHtml = RenderPartialViewToString("ChargeCodeSearch/_FindChargeCodeSearchResults1",chargecodes1); return RenderHtml ; } protected string RenderPartialViewToString(string viewName,object model) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetrequiredString("action"); ViewData.Model = model; using (StringWriter sw = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,viewName); ViewContext viewContext = new ViewContext(ControllerContext,viewResult.View,ViewData,TempData,sw); viewResult.View.Render(viewContext,sw); return sw.GetStringBuilder().ToString(); } }
RenderPartialViewToString方法返回部分视图的HtmlString.它会将结果附加到AjaxBeginForm“UpdateTargetId”属性的指定位置.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。