gpt4 book ai didi

c# - MVC3 Ajax.BeginForm 不返回特定的局部 View

转载 作者:行者123 更新时间:2023-11-30 12:49:10 26 4
gpt4 key购买 nike

从 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>

在文本框中输入参数后,我单击“提交”按钮,然后它会将我带到 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 View :

Views  
->Shared
->->ChargeCodeSearch
->->->_FindChargeCodeSearchResults1

没有!

我在 PartialViewMethod 中放置了一个断点。它能够查询并找到一个结果列表并将其分配给 chargecodes1 变量,但是在它遍历代码的返回行之后,它只是返回到包含 Ajax 的 View ,但它不会插入部分 View 更新目标“searchResults”中的“ChargeCodeSearch/_FindChargeCodeSearchResults1”。

我在 Shared 下有一个 FirmSearch 和 MemberSearch 文件夹,它们执行完全相同的功能,但具有不同的对象。那些工作。我不知道为什么这不起作用。

下面是应该返回的 View _FindChargeCodeSearchResult1 的代码片段。创建此 cshtml View 时,我将其创建为 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 调用的操作不会返回任何部分 View ,它会重新运行字符串为此您需要捕获 PartailView RenderHtml,因为 PartailView 的返回类型是字符串。

在 Controller 中

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 方法返回局部 View 的 HtmlString。并将结果附加到 AjaxBeginForm“UpdateTargetId”属性的指定位置。

关于c# - MVC3 Ajax.BeginForm 不返回特定的局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com