MVC と jQuery の検証を使い始めたばかりなので、ご容赦ください。また、質問のタイトルがどうあるべきかわかりません。8(
概要
jQuery ValidateでMVC 4を使用しています。私のフォームはクライアント側で検証されています。2 つの非常によく似たオブジェクトをフォームに配置する必要があるシナリオがあります。これは、2 つのプロパティを持つ ModelView によって実現されています。ModelView は View にリンクされており、リモート検証を除いてすべてが機能します。オブジェクトの特定の値に基づいてフィールドを検証する必要があります。コントローラーの検証アクションのパラメーターを除いて、すべてがうまくリンクされています。あなたが私にチチッと 不承認を与える前に、私は次のコード シナリオを作成しました。
コード
Name
の値に応じてリモート検証が必要なモデルクラスGroupID
。基本的に、名前はグループに固有です。
public class Colour
{
[Key]
public int GroupID {get;set;}
[Required]
[Remote("ColourExists", "Validation", AdditionalFields = "GroupID")]
public string Name {get;set;}
}
ColourExists
アクションが存在する検証コントローラー。
public class ValidationController :Controller {
public JsonResult ColourExists(string name, string groupID) {
// Add validation here later
return Json(false, JsonRequestBehavior.AllowGet);
}
}
ViewとControllerはModelViewにリンクされているため、フォームに 2 つの個別のインスタンスを表示できます。通常、ユーザーに 1 つのグループの明るい色と暗い色を尋ねる必要があります。(ちなみに、これは本物ではないことを覚えておいてください)
public class ColourViewModel {
public Models.Colour BrightColour { get; set; }
public Models.Colour DarkColour {get;set;}
}
生成された HTMLには、入力フィールドBrightColour_Name
とDarkColour_Name
. これらのフィールドにはdata-val-remote-additionalfields=*.Name
属性があります。ブラーではGET
、正しいアクションとコントローラーですが、パラメーターは null です。期待されるパラメータはやInstanceName.VariableName
などです。リクエストは次のように送信されますBrightColour.Name
DarkColour.Name
Validation/ColourExists?BrightColour.Name=red&BrightColour.GroupID=10
ColourExists
では、値がインスタンスの変数にリンクされている場合、検証コントローラーのアクションに値を渡すにはどうすればよいでしょうか?
編集
ビューは次のようになります。
@model Colours.ViewModels.ColourViewModel
@using (Html.BeginForm()) {
@Html.LabelFor(model => model.DarkColour.Name)
@Html.EditorFor(model => model.DarkColour.Name)
@Html.HiddenFor(model => model.DarkColour.GroupID)
<input type="submit" value="Save" />
}