1

フォームが送信されたときに、ビュー内の部分ビューを更新しようとしています。ただし、試してみると、部分ビューが通常のビューとしてレンダリングされます。誰かが私が間違っていることを教えてもらえますか?

コントローラ:

public ActionResult ChangeHeatName(string heatName, string updatedHeat)
    {
        string user = User.Identity.Name;
        HomeModel H = new HomeModel();
        H.ChangeHeatName(heatName, updatedHeat, user);
        ChemViewModel mySlagViewModel = new ChemViewModel();
        mySlagViewModel = H.QueryResults(heatName);

        return PartialView("PartialChemAnalysis", mySlagViewModel);
    }

部分ビュー フォーム (メイン ビューではなく、部分ビューに含まれる):

@using (Ajax.BeginForm("ChangeHeatName", "Home", new AjaxOptions(){UpdateTargetId = "chemDiv" InsertionMode = InsertionMode.Replace}))
{
    <section>
        Heat Name:<input type="text" name="heatName" value="@Html.ValueFor(x => x.heatname)" style ="width:100px"/>
        Change to:<input type="text" name="updatedHeat" value="" style="width: 100px" />
        <input type="submit" name="ChangeHeatName" value="Change" />
    </section>
}

部分ビューがレンダリングされているインデックス ビュー:

@if(ViewBag.SearchKey == null)
{
    <div class="content-wrapper">
        <hgroup class="title">
            <h1>@HttpContext.Current.User.Identity.Name</h1>
            <h2>@ViewBag.Message</h2>
        </hgroup>
    </div>
}

@using (Html.BeginForm("Index", "Home", "POST"))
{
<div class="searchField">
   <input type="text" class="search-query" name="heatSearch" placeholder="Search">
        <button class="btn btn-success"  type="submit">Search</button>
    <br />
    @if (ViewBag.AverageSuccessful == true)
    {
        <input type="text" name="AvgConfirmation" class="search-query" value="Average Submitted Successfully" width:"400px" placeholder="Search" />
    }
</div>
}

@if(ViewBag.SearchKey != null)
{
    <div>
    <div id ="chemDiv">
    @Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey)
    </div>

    <div id ="slafDiv">
    @Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey)
    </div>
    </div>

 }

SearchKey を渡すインデックス コントローラー:

 [HttpPost]
    public ActionResult Index(string heatSearch)
    {
        ViewBag.SearchKey = heatSearch;

        return View();
    }
4

3 に答える 3

1

POSTで指定していませんAjax.BeginForm()。これを試して:

@using (Ajax.BeginForm("ChangeHeatName", "Home", FormMethod.Post, 
new AjaxOptions(){UpdateTargetId = "chemDiv" InsertionMode = InsertionMode.Replace}))
{...}

また、コントローラーのアクションにブレークポイントを設定してステップ実行し、実際にヒットreturn PartialView()またはスキップしているかどうかを確認します。

于 2013-04-12T17:36:30.933 に答える
0

直感的な修正ではないため、これを投稿します。どうやらMVC 4とjQuery 1.9.1に問題があるようです。これを機能させるには、jQuery 1.7.1への参照を変更する必要がありました

于 2013-04-12T17:29:02.027 に答える