[英]MVC3 Ajax.BeginForm not returning specific partialview
從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”屬性的指定位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.