如何对绑定到 mvc 中模型的相同属性的多个局部视图应用验证?

Posted

技术标签:

【中文标题】如何对绑定到 mvc 中模型的相同属性的多个局部视图应用验证?【英文标题】:How to apply validation on multiple partail views which are bind to same property of model in mvc? 【发布时间】:2014-02-22 05:48:56 【问题描述】:

我是 mvc 的新手。我刚刚遇到了一个问题。我创建了一个 prtial 视图,其中有一个 texbox,它绑定到模型中的属性。在该属性上应用了 [必需] 验证。问题是,当我在一个视图上多次渲染该部分视图并仅在一个文本框中填充数据后单击提交按钮时,验证同时适用于所有部分视图。我想要的是 [Required] 验证应该分别应用于所有部分视图/文本框。

我的部分视图是

@html.TextboxFor(m=>m.Name)

型号是

[Required]
public string Name(get; set;

我的视图有多个部分视图

 @Html.Partial(_MyPartialView)
 @Html.Partial(_MyPartialView)
<input Type="submit" value="click"/>

当我在第一个部分填充数据时,验证也会同时自动应用于第二个部分视图。

希望你们能理解前言。如果有人可以提供帮助,我将非常感激,因为我为此问题困了几天。非常感谢。

【问题讨论】:

【参考方案1】:

很难理解你想要做什么,因为如果你有一个包含一个名为 NAME 的属性的模式,那么我如何理解你有一个表单,并且在这个表单内你会渲染相同的局部视图,只有你拥有的属性,那么你期望在 POST 方法上得到什么? 我觉得你应该改变你的模态有一个这样的字符串列表:

public class Model

  public IList<Name> Namesget;set;
  public Model()
  
        Names=new List<Name>();
  

public class Name

    [Required]
    public string FirstNameget;set;

现在你可以做这样的事情: 查看:

@
   Layout=null;

  @model Model
   @using (Ajax.BeginForm("Action", "Controller", null,
                        new AjaxOptions  HttpMethod = "POST" ))
 
    @Html.TextBoxFor(c=>c.Names[0].FirstName)
    @Html.TextBoxFor(c=>c.Names[1].FirstName)
    //and so on 

   <input type="submit" value="submitForm"/>

不要忘记包含所有必要的 mvc 客户端验证脚本。希望这会对你有所帮助。

【讨论】:

非常感谢 MDDDC 的回复。我知道这很难理解。基本上我已经发布了我的问题的一个非常简化的版本。我想我应该再次重新表述我的问题。 试着理解这个问题,就像我有一个必须多次在其他视图上使用的局部视图..在那个局部视图上我有一个接受特殊类型输入的文本框..我有为那个 bc 制作了部分视图,我必须在我的应用程序中一次又一次地重用那种特殊类型的文本框。在部分视图中,有一个文本框绑定到模型的单个属性。但是当我放置或重用它时对我在问题中提到的任何发生验证问题的观点进行多次部分视图。我希望​​现在你能更好地了解这个问题。 看看 mvc 编辑器模板,我真的不喜欢它们,但这就是你在说的......我现在不知道怎么说,但验证与模型非常接近表单,没有表单,这将不起作用....

以上是关于如何对绑定到 mvc 中模型的相同属性的多个局部视图应用验证?的主要内容,如果未能解决你的问题,请参考以下文章

将 ListBoxFor 绑定到 MVC 3 中的模型并使用另一个模型自动选择多个项目

使用 MVC 在同一页面上的多个部分视图和模型绑定实例

如何将 MVC 模型与 ajax 调用绑定?

如何指定一个请求参数绑定到某个控制器方法参数而不是Spring MVC中的模型属性?

MVC 绑定到具有列表属性的模型忽略其他属性

mvc 从视图传递到Controller 多个不同的实体类接收如何做呢?