2012-02-17 11 views
0

私はこのURLのポップアップフォームを使用しています:http://nickstips.wordpress.com/2011/08/11/asp-net-mvc-ajax-dialog-form-using-jquery-ui/ロード関数を使用してdiv内にjqueryダイアログをロードします。jqueryモーダルダイアログ内でレンダリングすると、入力タイプ=テキストが機能しません

私はいくつかのテキストフィールドと1つのアップロードファイルフィールドを持つフォームを持っています。このフォームは正しく動作し、このフォームをアクションに正常に投稿し、HttpPostedFileオブジェクトを回復しました。

しかし、jqueryダイアログでload関数を使用して同じフォームをロードし、同じフォームを前回と同じアクションにポストすると、失敗しました。なぜ私はHttpPostedFileオブジェクトが常にnullであるのか分かりません。

実際のコード: I上で指定DialogForm.jsを使用するには、ヘルパー関数を呼び出し:

@Html.DialogFormButton("Add", Url.Action("Add", "X", new { id = y }), "", "targetId", Url.Action("List", "X", new { id = y })) 

このコードは、モーダルポップアップでビューをロードする必要があります

$('.dialogLink').live('click', function() { 
     var element = $(this); 
... 
$(dialogDiv).load(this.href, function() { 
      $(this).dialog({ 
       modal: true, 
       resizable: false, 
       title: dialogTitle, 
       buttons: { 
        "Save": function() { 
         // Manually submit the form 
         var form = $('form', this); 
         $(form).submit(); 
        }, 
... 

実際に私が呼びますビューはエディタテンプレートをロードします。

@using (Ajax.BeginForm("Test", "X", new { }, new AjaxOptions { }, new { enctype = "multipart/form-data" })) 
     { 
      @Html.EditorFor(m => Model, "editorView") 
     } 

エディタビューには、いくつかのテキストボックスと入力タイプのファイル要素が含まれています

<tr> 
     <td class="label"> 
      @Html.LabelFor(m => m.PathToAttachment) 
     </td> 
     <td> 
      <div class="field_container"> 
       @Html.TextBoxFor(m => m.FileUpload, new { type = "file" }) 
      </div> 
     </td> 
    </tr> 

すべての要素はモデルクラスのメンバーです。ポストのパラメータがメソッドを追加します。どちらである:

[HttpPost] 
public ActionResult AddAttachment(AttachmentModel model) { 
    if (model.FileUpload.ContentLength > 0) { } 
} 

問題:model.FileUploadは常にnullですが、フォーム要素の残りが値を持っています。 DialogForm.jsをフォームの読み込みに使用した場合にのみ発生することに注意してください。そうでなければ、単純なページ(ポップアップではない)にフォームをロードすると、FileUpload値を正常に取得できます。解決済み

、私はそれがファイルでAjaxのフォームを送信することはできないということが分かったので、私はこのライブラリを使用せざるを得なかっ:

http://code.google.com/p/ajax-file-upload-struts2/source/browse/trunk/src/main/resources/template/com/davidjc/javascript/ajaxfileupload.js?r=4

それは、フォーム要素で目に見えないのiframeを作成し、サーバーに自動的に投稿します。

おかげ
czetsuya

+1

コードの関連部分、つまりjQuery/JavascriptとHTMLを含めます。 –

+0

真剣に、あなたの質問がそれほど漠然としているときは誰もあなたを助けることができないコードや例を追加してください:) – kingmaple

+0

申し訳ありません、コードが追加されました。 – czetsuya

答えて

0

enctype="multipart/form-data"正しく設定されているあなたのモーダルウィンドウで<form>タグを確認してください。

+0

はい、私はすでにそのタグを持っています。実際にフォームはjqueryダイアログにロードされていないときに機能します。だから私はそれがjavascript/ajaxと関係があると推測している。 – czetsuya