Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我的值链接到实例的变量,我应该如何将值传递给控制器中的验证操作?_C#_Asp.net Mvc_Jquery Validate - Fatal编程技术网

C# 如果我的值链接到实例的变量,我应该如何将值传递给控制器中的验证操作?

C# 如果我的值链接到实例的变量,我应该如何将值传递给控制器中的验证操作?,c#,asp.net-mvc,jquery-validate,C#,Asp.net Mvc,Jquery Validate,我刚刚开始使用MVC和jQueryValidate,所以请耐心听我说。我也不知道我的问题的标题应该是什么。八,( 概述 我将MVC 4与jQuery validate一起使用。我的表单将在客户端进行验证。我有一个场景,其中两个非常相似的对象需要位于我的表单上。这是通过具有两个属性的ModelView实现的。ModelView链接到视图,除远程验证外,所有操作都正常。我需要验证一个字段基于对象中的特定值。除了控制器中验证操作的参数外,所有内容都很好地链接在一起。在您给我不批准tsk tsk之前,我

我刚刚开始使用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页面的视图。我绕过了该视图,直接访问了控制器,从而使视图完全脱离图片,并通过浏览器访问了控制器。我将使用示例视图代码更新问题。