我才刚刚开始使用 MVC 和 jQuery 验证,所以请多多包涵。我也不知道我的问题应该是什么标题。8(
概述
我正在使用带有 jQuery 验证的 MVC 4。我的表单正在客户端进行验证。我有一个场景,我的表单上需要两个非常相似的对象。这是通过具有两个属性的 ModelView 实现的。ModelView 链接到 View 并且除了远程验证之外一切正常。我需要根据对象中的特定值验证字段。除了控制器中验证操作的参数之外,所有内容都很好地链接在一起。在你给我不赞成tsk tsks 之前, 我编造了以下代码场景。
编码
模型类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以便我可以在表单上显示两个单独的实例。通常,我需要向用户询问一组的亮色和暗色。(在你tsk之前,请记住,这不是真的)
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
是正确的动作和控制器,但参数为空。预期的参数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" />
}