2016-09-23 4 views
0

私の知る限りでは、モデルバインダーはアクションメソッドのすべてのプリミティブパラメータを繰り返し処理し、入力データ(http postデータ)の各キーとパラメータの名前を比較します。一致が見つかると、対応する入力データがパラメータに割り当てられます。MVCモデルバインダー:<input>の属性とアクションメソッドの入力パラメーターを比較しますか?

ここで私の質問は、どれが比較されてメソッドパラメータに割り当てられる属性値(名前、値)ですか?<input>です。

ビュー:

<input type="submit" name="BtnSave" value="Save Employee" /> 
<input type="button" name="BtnReset" value="Reset" onclick="ResetForm();"/> 
<input type="submit" name="BtnCancel" value="Cancel" /> 

コントローラー:

BtnSubmit
public ActionResult SaveEmployee(Employee employee, string BtnSubmit) 
    { 
     switch (BtnSubmit) 
     { 
      case "Save Employee": 
       return Content (employee.EmployeeName + "," + " " + employee.Designation + "," + " " + employee.DateOfBirth); 

      case "Cancel": 
       return RedirectToAction("EmployeeForm"); 
     } 
     return View(); 
    } 

比較される属性に?名前や価値?

+0

フォームは、成功したコントロールの名前と値のペアのみをポストします。コントロールの名前がパラメータ(またはモデルプロパティ)の名前と一致する場合は、コントロールの値で設定されます。 –

+0

@StephenMueckeこの例を参照してください。名前または値BtnSubmitと比較されるもの – izengod

+0

私が知っている限り、ボタンの値はフォームから返信されません。その意味ではコントロールとしてカウントされません。 MVCそのものとは関係ありません.HTMLフォームが動作する方法と同じです。フォームをポストバックし、ブラウザの開発ツールやFiddlerでリクエストの本文を見てください。投稿リクエストの内容が表示されます。ボタン/送信コントロールに関連するものが含まれていると、私は驚いています。特別な値が必要な場合は、非表示のフィールドを追加します。 – ADyson

答えて

0

HTMLコントロールタイプにかかわらず、name属性は、モデルバインダーがバインドするプロパティまたはアクションパラメータを常に決定し、value属性は常にプロパティまたはアクションパラメータが設定される値になります。

ただし、ここにはBtnSubmitという名前のアクションパラメータがあり、同じ名前のHTMLに実際の入力はありません。したがって、値は常にnullになります。stringタイプのデフォルト値です。タイプの2つの入力が同じname属性を持っており、その名前は、あなたの行動のparamに一致する両方の「提出」という

<input type="submit" name="BtnSubmit" value="Save Employee" /> 
<input type="button" name="BtnReset" value="Reset" onclick="ResetForm();"/> 
<input type="submit" name="BtnSubmit" value="Cancel" /> 

お知らせ:

多分、あなたがここに探していることは、よりのようなものです。このようにして、彼らはラジオのような行動をします。どちらがクリックされても、実際にその価値が掲載されます。つまり、ユーザーがSave Employeeと表示されているものをクリックすると、アクションのBtnSubmitの値はSave Employeeになります。それ以外の場合は、もう一方をクリックすると、値はCancelになります。

また、FWIWは実際にはresetタイプなので、リセットボタンはtype="reset"でなく、type="button"である必要があります。その時点であなたのJavaScript ResetForm機能は必要ないかもしれません。どちらの場合でも、このボタンの値は決して転記されないので、名前を持つポイントはありません。

+0

非常に有益な答え。ありがとう、トン! – izengod

関連する問題