0

複数のフォームを持つビューがあり、それぞれが特定の値を持つ非表示のフィールドを送信し、すべてが同じモデルを共有する必要があります。私のコントローラからは、ビューをレンダリングする前に値を設定しましたが、その値は "Post"メソッドの1つに必要です。他のフィールドは、同じ隠しフィールドを別の値で提出する必要があります。ここで送信前に値を設定するとコントローラに送信されません

私はhiddenInput EventCommand

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2" })) 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
    <div> 
     <button type="submit" name="upload-excel" value="upload-excel" id="excel-upload" class="btn btn-success">Continue Upload</button> 
    </div> 
} 

とビューのちょうど二フォームを表示していますと、これまでのところ、私はJavaScriptでそれを設定しようとしましたが、それは

$(function(){ 
    $("#excel-upload").on("click", function (e) { 
     $("#EventCommand").val("upload-excel"); 
    }); 
} 

を動作しません。その方法を読んで、ViewDataで解決策を見つけましたが、その回避策でもうまくいきませんでした。

@Html.HiddenFor(m => m.EventCommand) 
ViewData["EventCommand"] = "upload-excel" 

すべてのヘルプは、あなたが同じid、あなたはボタンをクリックしたときに正しいものを選ぶことができないあなたのコードで複数の隠されたfiledsを持っているよう

+0

値を保存していますか? 'var value = $("#EventCommand ")を試してください。val(" upload-excel ");' – nurdyguy

+0

ここで何をしようとしているのかはっきりしません。なぜ隠し入力の値を設定するスクリプトが必要なのですか?モデルをビューに渡す前に、コントローラの 'EventCommand'プロパティの値を設定するだけです。 –

+0

同じビューの倍数フォームがあるのでできません同じモデルなので、EvenCommandにはコントローラからの値があり、別のモデルでは別のモデルを提出する必要があります – Heinrich

答えて

0

: あなたはボタンがクリックされたフォーム内の正確な隠されたフィールドを取得しようとする必要があります。隠し入力をパーシャルビュー "_HiddenFields"に置き、レンダリングする前にViewDataDictionaryの値を渡しました。それによって、私は生成したいhtmlのPartialViewに制限を付けることができました。以下はアイデアです:

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2" })) 
{ 
    @Html.Partial("HiddenFields/_HiddenFields", Model, new ViewDataDictionary { { "EventCommand", "excel-upload"} }) 
} 

、あなたはViewDataをを持っていても、それらの両方が動作していないので、私は最初の2行をコメントに見れば、私の部分図は、この

@if ((string)Html.ViewData["EventCommand"] == "excel-upload") 
{ 
    @*@Html.HiddenFor(m => m.EventCommand)*@ 
    @*@Html.HiddenFor(m => m.EventCommand, new {@value = "excel-upload"})*@ 
    <input id="EventCommand" name="EventCommand" type="hidden" value="excel-upload" /> 
} 
else 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
} 

のようなものですフィールドEventCommandと同じキー。

1

が見える理解されるであろう。カミソリのレンダリングHTMLが同じモデルを使用して、私のHiddenInputでも同じですので

$(function() 
{  
    $("#excel-upload").on("click", function (e) { 
     $(this).parents("form #EventCommand").val("upload-excel"); 
     return true; 
    }); 
} 
0
Use following code: 

@using (Html.BeginForm("ContinueWithUpload", "Odometer", FormMethod.Post, new { id = "form2",onsubmit = "return myJsFunction(this)" })) 
{ 
    @Html.HiddenFor(m => m.EventCommand) 
    <div> 
     <button type="submit" name="upload-excel" value="upload-excel" id="excel-upload" class="btn btn-success">Continue Upload</button> 
    </div> 
} 


Add following javascript function: 

function myJsFunction(this) 
{ 
$(this).find('#EventCommand').val("upload-excel"); 
     return true; 
} 
関連する問題