2017-01-24 5 views
-1

コントローラルートにテキストボックス値を使用しようとしていますが、構文に問題があります。基本的には、エンドユーザーがファイルを選択してから、データを処理して送信するためにAPIにデータを送信します。私は以下の静的なコードを動作させていますが、xmlパスをテキストボックス値を介して動的に設定することはできません。テキストボックス値をパラメータとしてコントローラルートに渡します

ファイルパスにドットがあるので、(私が言う限りでは)パスの最後にスラッシュが必要であることに注意してください。

@using (Html.BeginForm("", "api/food/dummy food file.xml/")) 
{ 
    <div class="row"> 
     <div class="col-lg-6"> 
      <label class="control-label">Select File</label> 
      <div class="input-group"> 
       <label class="input-group-btn"> 
        <span class="btn btn-default"> 
         Browse&hellip; <input type="file" style="display: none;" single> 
        </span> 
       </label> 
       <input id="food.filepath" name="food.filepath" type="text" class="form-control" readonly> 
      </div> 
     </div> 
    </div> 

    <br /> 

    <div> 
     <button id = "btnSubmit" type="submit" class="btn btn-primary">Submit</button> 
    </div> 

    } 

私は構文が何であるかはわかりませんが、私は以下のようなことはできません。

@using (Html.BeginForm("", "api/food/" + food.filepath + "/")) 
{ 
    <div class="row"> 
     <div class="col-lg-6"> 
      <label class="control-label">Select File</label> 
      <div class="input-group"> 
       <label class="input-group-btn"> 
        <span class="btn btn-default"> 
         Browse&hellip; <input type="file" style="display: none;" single> 
        </span> 
       </label> 
       <input id="food.filepath" name="food.filepath" type="text" class="form-control" readonly> 
      </div> 
     </div> 
    </div> 

    <br /> 

    <div> 
     <button id = "btnSubmit" type="submit" class="btn btn-primary">Submit</button> 
    </div> 

    } 
+0

。このフォームを投稿するコントローラメソッドとは何ですか?なぜ、モデルにバインドされない名前属性を持たない隠しファイル入力があるのですか?そして、読み込み専用の入力値(あなたはすでにサーバー上の値を知っています)をポストバックするのは何ですか。 –

+0

ファイルパス文字列を送信しようとしているコントローラはapi/foodです。ファイルパスのキャプチャがこのように設定されている理由は、jqueryがボタンに関連付けられているために、ユーザがファイルを参照して、使用するファイルを選択できるからです。テキストボックスは、その選択を表示するためだけに使用されます。わかりやすくするために必要な情報が他にあるかどうかを教えてください。 – user2653814

+0

POSTメソッドとモデルを含む関連コードを表示します。あなたのコードは意味をなさないので、あなたがしようとしていることを推測することはできません。 –

答えて

0

フォームはサーバー上でレンダリングされ、値food.filepathはクライアント上にあるため、それらを混在させることはできません。クライアントの値に応じてフォームアクションを変更するには、javascriptを使用してクライアント上で行う必要があります。

あなたはこれにBeginFormを変更することにより、例えば、JavaScriptのアクションを提出の上にそれを追加アクションからファイルを削除することができます:あなたがここでやりたいと思っかを理解することは不可能

@using (Html.BeginForm("", "api/food/", FormMethod.Get, new { onSubmit = "this.dataset.act = this.dataset.act||this.action; this.action = this.dataset.act + this['food.filepath'].value" })) 
+0

これは魅力のように働いた。これも必要な場合は、適切な制御名を使用して、get/post/etcを変更することを忘れないでください。適切である – user2653814

関連する問題