2011-12-23 9 views
0

私はMVCに新たなんだが期待通りに働いて、それを好き、しかし、問題が発生したしていません。ASP.NET MVC3アヤックス:InsertionMode.Replaceは

@model MyModel 

@Ajax.ActionLink("Add", "Create", "User", null, 
    new AjaxOptions { 
     UpdateTargetId = "mydiv", 
     InsertionMode = InsertionMode.Replace, 
     HttpMethod = "GET" 
    }, 
    new { 
     @class = "add" 
    }) 

<div> 
    @Html.Partial("UserTable", Model.RegisteredUsers) 
</div> 

<div id="mydiv" /> 

これはおそらくかなり明白ですが、ページがユーザーのリストが表示されます(「USERTABLE」部分図)とにクリックして管理者のためのリンクが含まれています。私はこのようなコードでビューを持っています新しいユーザーを作成します。ユーザーフォームの作成は、UserTable上のポップアップウィンドウのように機能する部分的なビューです。ここでユーザーフォームを作成して返すコントローラのアクションがあります:

public string Create() 
{ 
    Models.User user = new Models.User(); 
    PartialViewResult vr; 
    ViewContext vc; 
    StringWriter sw = new StringWriter(); 

    vr = PartialView("../../Views/User/UserForm", user); 
    vr.ExecuteResult(this.ControllerContext); 
    vc = new ViewContext(this.ControllerContext, vr.View, vr.ViewData, new TempDataDictionary(), sw); 
    vr.View.Render(vc sw); 

    return "<div style=\"position:absolute; top:200px; left:175px\">" + sw.ToString() + "</div>"; 
} 

私が代わりのActionResult(またはそのような何か)の文字列を返すんだ理由は、「ポップアップ」効果を作成するラッパーのdivを追加することです。これは完全に機能しますが、「ポップアップ」に表示されるほか、「mydiv」というUserTableの下にもユーザー作成フォームが表示されます。ページのソースの検査は「mydiv」は置き換えられていないことを示しているのではなく、作成ユーザーフォームのコードは、新しいポップアップdivの中にそのdivのの両方に配置されている、と私は運把握を持ちませんよなぜか。

私は正しいjQueryのライブラリを参照していると思う:私はこの動作を取得し、どのようにそれを修正するよ、なぜ

<script src="@Url.Contetn("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Contetn("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

誰も教えてもらえますか?または、あなたが推奨できるのと同じ効果を達成するためのより良いアプローチがありますか?

TIA!

ジェフは

EDIT:

ああ、言及するのを忘れてしまった:私はちょうど作成ユーザーフォーム自体に「ポップアップ」のdivを置くことができない理由は、それが中に他の場所で使われているということですそのシステムは、その行動はそこでは望ましくない。私はそのフォームを自分で作成せず、私のシナリオで別の開発者のコ​​ードを再利用するだけでした。

答えて

1

私はこれを考え出したと思います。コントローラのアクションでRenderメソッドが何をしているのか誤解しました。それは明らかだったはずですが、実際に部分的なビューをページに書き出します。アクションが返されたときに、「ポップアップ」divを使用して、今回は再び書き込まれました。

これを処理する別の方法が見つかりました。私が言及したように、私は直接ユーザーフォームを作成することはできませんでしたが、私は別の部分ビューを作成し、@Html.Partial経由でユーザーフォームを作成しました。そして、私がしなければならなかったことは、コントローラのアクションからこの "派生した"部分的なビューを返すことでした。それは魅力的なように機能しました。

はとにかく、誰もが今まで似たような状況で自分自身を見つけた場合には、私はこれを投稿しようと思いました。

Jeff