C# 如果我的值链接到实例的变量,我应该如何将值传递给控制器中的验证操作?
我刚刚开始使用MVC和jQueryValidate,所以请耐心听我说。我也不知道我的问题的标题应该是什么。八,( 概述 我将MVC 4与jQuery validate一起使用。我的表单将在客户端进行验证。我有一个场景,其中两个非常相似的对象需要位于我的表单上。这是通过具有两个属性的ModelView实现的。ModelView链接到视图,除远程验证外,所有操作都正常。我需要验证一个字段基于对象中的特定值。除了控制器中验证操作的参数外,所有内容都很好地链接在一起。在您给我不批准tsk tsk之前,我编写了以下代码场景 代码 模型类,其中C# 如果我的值链接到实例的变量,我应该如何将值传递给控制器中的验证操作?,c#,asp.net-mvc,jquery-validate,C#,Asp.net Mvc,Jquery Validate,我刚刚开始使用MVC和jQueryValidate,所以请耐心听我说。我也不知道我的问题的标题应该是什么。八,( 概述 我将MVC 4与jQuery validate一起使用。我的表单将在客户端进行验证。我有一个场景,其中两个非常相似的对象需要位于我的表单上。这是通过具有两个属性的ModelView实现的。ModelView链接到视图,除远程验证外,所有操作都正常。我需要验证一个字段基于对象中的特定值。除了控制器中验证操作的参数外,所有内容都很好地链接在一起。在您给我不批准tsk tsk之前,我
名称
需要根据GroupID
的值进行远程验证。从本质上讲,名称对于组是唯一的
public class Colour
{
[Key]
public int GroupID {get;set;}
[Required]
[Remote("ColourExists", "Validation", AdditionalFields = "GroupID")]
public string Name {get;set;}
}
验证存在操作的控制器
public class ValidationController :Controller {
public JsonResult ColourExists(string name, string groupID) {
// Add validation here later
return Json(false, JsonRequestBehavior.AllowGet);
}
}
视图和控制器链接到一个模型视图,这样我就可以在表单上显示两个单独的实例。通常,我需要要求用户为一个组提供一个亮颜色和一个暗颜色。(tsk之前,请记住,这不是真的)
生成的HTML具有输入字段BrightColour\u Name
和DarkColour\u Name
。这些字段具有data val remote additionalfields=*.Name
属性。在模糊时,它们获取正确的操作和控制器,但参数为空。预期参数为InstanceName.variablebleName
如BrightColour.Name
和DarkColour.Name
。请求按如下方式发送验证/colorExists?BrightColour.Name=red&BrightColour.GroupID=10
因此,如果我的值链接到实例的变量,我应该如何将值传递到验证控制器中的colorExists
操作
编辑
视图如下所示:
@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" />
}
@model colors.ViewModels.colorviewmodel
@使用(Html.BeginForm()){
@LabelFor(model=>model.DarkColour.Name)
@EditorFor(model=>model.DarkColour.Name)
@Html.HiddenFor(model=>model.DarkColour.GroupID)
}
通常,在这种情况下,您会在远程验证操作中使用前缀,如下所示:
public JsonResult ColourExists([Bind(Prefix = "BrightColour")] string name) {
// Add validation here later
return Json(false, JsonRequestBehavior.AllowGet);
}
public class ColourViewModel
{
public BrightColourViewModel BrightColour { get; set; }
public DarkColourViewModel DarkColour { get; set; }
}
但是,在您的案例中不能这样做,因为您在ViewModel(而不是ModelView)中使用了两个相同的实体,并且每个实体都有自己的前缀。因此,绑定失败
因此,必须创建两个单独的视图模型:
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; }
}
然后,重新定义ColorViewModel,如下所示:
public JsonResult ColourExists([Bind(Prefix = "BrightColour")] string name) {
// Add validation here later
return Json(false, JsonRequestBehavior.AllowGet);
}
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);
}
你能试着将color
类型的单个参数传递到你的colorExists
方法中吗?这只是一个粗略的猜测,但也许MVC足够聪明,可以将查询参数序列化到一个对象中……我用name
和groupID
直接向控制器发出get
请求,它成功了。当它是彩色的时候.Name和color.GroupID变量为null
。我也尝试了此方法,但无法使其正常工作:(因此我设法通过HttpContext.Request.Params[“darkcolor.Name”]获取值)
。该方法是否存在我可能不知道的任何错误?非常感谢您的回答。您是否必须执行一些特殊操作才能使Bind属性正常工作?如果我将其添加到那里并直接访问控制器,则参数始终为空。我需要查看您的视图。您能将其发布到此处吗?我的Validati从未有过视图onController。ValidationController返回一个JsonResult。我无法获取绑定属性以单独使用控制器。“生成的HTML具有输入字段BrightColor_Name和DarkColor_Name”。这就是我所指的视图。我需要查看生成该html页面的视图。我绕过了该视图,直接访问了控制器,从而使视图完全脱离图片,并通过浏览器访问了控制器。我将使用示例视图代码更新问题。