4

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 ビューを返す 必要があります。

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> 

どんな助けや提案も大歓迎です。

4

1 に答える 1

1

Ajax.BeginForm によって呼び出されるアクションは、部分的なビューを返さないため、文字列を再実行します。これには、PartailView の戻り値の型が文字列であるため、PartailView RenderHtml をキャッチする必要があります。

コントローラー内

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」属性の指定場所に結果を追加します。

于 2012-09-13T08:13:47.033 に答える