1

カスケード ドロップダウン リストを含む Razor ビューがあります。親リストは ajax 対応で、jquery.unobtrusive-ajax.js を使用します。子リストは部分ビューです。

@Ajax.DropDownListFor(model => model.ParentId, 
    (SelectList)ViewBag.ParentId, 
    "Unknown",
    new AjaxOptions
    {
        HttpMethod = "Get",
        Url = Url.Action("GetChildren"),
        UpdateTargetId = "ChildId",
        InsertionMode = InsertionMode.Replace
    })
...
@Html.Partial("ChildList")

部分ビューには、子リストのドロップダウンが含まれているだけです。

@Html.DropDownList("ChildId", "Unknown")

コントローラー メソッド GetChildren は、リスト データを ViewBag アイテムにロードし、部分ビューを返します。

    [OutputCache(Duration = 0)]
    public ActionResult GetChildren(long? parentId) 
    {
        if (parentId.HasValue)
        {
            ViewBag.ChildId = ListHelper.GetChildList(parentId.Value, null);
        }
        else
        {
            ViewBag.ChildId= ListHelper.GetEmptyList();
        }
        return PartialView("ChildList");
    }

親リストでアイテムが選択されると、子リストに関連アイテムがロードされます。これは、Firefox と Chrome で意図したとおりに機能します。しかし IE9 では、子リストは単に空白になっています。Fiddler で Ajax 呼び出しを見ると、部分ビューの内容が正しく返されていることがわかります。

IE で子リストを正しく更新するにはどうすればよいですか?

編集

親リストでアイテムが選択されると、Fiddler はこれを記録します。

HTTP/1.1 200 OK
Cache-Control: public, max-age=0, s-maxage=0
Content-Type: text/html; charset=utf-8
Expires: Thu, 07 Feb 2013 17:11:29 GMT
Last-Modified: Thu, 07 Feb 2013 17:11:29 GMT
Vary: *
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 07 Feb 2013 17:11:29 GMT
Content-Length: 182

<select id="ChildId" name="ChildId"><option value="">Unknown</option>
<option value="350">Child 1a</option>
<option value="351">Child 1b</option>
</select>
4

1 に答える 1

0

DIV でラップ@Html.Partial("ChildList")し、UpdateTargetId をその DIV の ID に変更することをお勧めします。InsertionMode.Replace要素の内部 html のみを置き換えます。あなたの場合、選択タグのコンテンツはアクション結果に置き換えられているため、次のように効果的であると思います。

<select id="ChildId" ...>
    <select id="ChildId" ...>
        <option>1</options>
        <option>2</options>
        <option>3</options>
    </select>
</select>

ご存じのとおり、それは正しくありません。IE9 ではそれが許可されておらず、びっくりしています。

于 2013-02-07T20:27:54.170 に答える