如果我的值链接到实例的变量,我应该如何将值传递到控制器中的验证操作
本文关键字:值传 操作 控制器 验证 我应该 链接 我的 实例 变量 如果 | 更新日期: 2023-09-27 18:21:44
我才刚刚开始使用MVC和jQuery验证,所以请耐心等待。我也不知道我的问题应该是什么标题。8(
概述
我正在使用MVC 4和jQuery验证。我的表格正在客户端进行验证。我有一个场景,在我的窗体上需要两个非常相似的对象。这是通过具有两个属性的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);
}
}
视图和控制器链接到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" />
}
通常,在这种情况下,您会在远程验证操作中使用前缀,如下所示:
public JsonResult ColourExists([Bind(Prefix = "BrightColour")] string name) {
// Add validation here later
return Json(false, JsonRequestBehavior.AllowGet);
}
但是,在您的情况下不能这样做,因为您在ViewModel(而不是ModelView)中使用两个相同的实体,并且每个实体都有自己的前缀。因此,绑定失败。
因此,您必须创建两个独立的ViewModels:
public class BrightColourViewModel
{
public int GroupID { get; set; }
[Required]
[Remote("BrightColourExists", "Home", AdditionalFields = "GroupID")]
public string Name { get; set; }
}
public class DarkColourViewModel
{
public int GroupID { get; set; }
[Required]
[Remote("DarkColourExists", "Home", AdditionalFields = "GroupID")]
public string Name { get; set; }
}
然后,重新定义您的ColourViewModel,如下所示:
public class ColourViewModel
{
public BrightColourViewModel BrightColour { get; set; }
public DarkColourViewModel DarkColour { get; set; }
}
然后创建两个独立的远程验证操作,如下所示:
public JsonResult BrightColourExists(BrightColourViewModel brightColour)
{
// Call shared code to check if colour exists
return Json(false, JsonRequestBehavior.AllowGet);
}
public JsonResult DarkColourExists(DarkColourViewModel darkColour)
{
// Call shared code to check if colour exists
return Json(false, JsonRequestBehavior.AllowGet);
}