加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVC3 Ajax.BeginForm没有返回特定的partialview

发布时间:2020-12-15 21:40:08 所属栏目:百科 来源:网络整理
导读:从Ajax.BeginForm方法调用它时,我无法返回PartialView. Ajax调用如下. @{ ViewBag.Title = "ChargeCode 1"; Layout = "~/Views/Shared/_Search_Layout.cshtml";}div class="span9" div class="page-header" h1Charge Code1/h1 /div @using (Ajax.BeginForm("
从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”属性的指定位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读