0

我有一个输入、类型文本、元素,该元素正在客户端上使用 MVC3 验证进行验证,我不希望在发布时将输入值发送到服务器。

我有两个实体:一个“文件”实体和一个“公司”实体,它们共享一对一的关系。文件实体有一个 CompanyId 外键。

这就是为什么如果您查看名称和 id 属性,它们会显示为:File.Company.Code 或 File_Company_Code。

我想避免将输入值发送回服务器的原因是当请求到达服务器时,我只想将值绑定到我的“文件”类型的实体。由于它还接收“File.Company.Code”的值,它还尝试将值绑定到文件的公司对象,这是我想要避免的。

The input element is :

    <input name="File.Company.Code" id="File_Company_Code" type="text" data-val-required="Se requiere un c&#243;digo de cliente." data-val="true" value=""/>

    And the span element:
    <span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for=" File.Company.Code "/>

我试过:
- 使用 jquery 更改输入名称和跨度 data-valmsg-for 属性。但我认为这样做之后我可能需要重新绑定验证器?

有什么建议么?(如果不让我知道,我希望能清楚地解释自己。)
谢谢

更新 1 **
感谢 AFinkelstein 的建议让我走上了正确的轨道,我更新了我的域模型,例如:

public class FileModel {

        public File File {
            get {
                return this.file;
            }
        }

        *** ADDED this which helped me solve the problem ***
        public Company Company {
            get {
                return this.file.Company;
            }
        }
    }

在我看来,而不是这样做:

 @Html.TextboxFor(model => model.File.Company.Code)  
  @Html.ValidationMessageFor(model => model.File.Company.Code)

我现在这样做:

  @Html.TextboxFor(model => model.Company.Code)  
  @Html.ValidationMessageFor(model => model.Company.Code)

这样生成的 name 和 Id 属性具有值:Company.Code 和 Company_Code,它们没有前面的“File”。当我在服务器上收到帖子并将值绑定到 File 对象时:

 FileModel fileModel = new FileModel();
            try {

                TryUpdateModel(fileModel.File, "File");

因为它没有收到“File.Company.Code”的值,所以它不会尝试初始化文件的“Company”对象,这会导致我出现其他问题。

4

2 回答 2

1

由于它还接收“File.Company.Code”的值,它还尝试将值绑定到文件的公司对象,这是我想要避免的。

我认为这意味着 File 是您项目中的域模型。我建议在您的视图中使用视图模型

public class FileViewModel
{
    //other stuff contained within the File class

    [Required]
    public string FileCompanyCode { get; set: }
}

您可以在发布后使​​用您的视图模型来创建或重新获取您的实际文件。只是不要将您的实际文件公司对象设置为视图模型中的文件公司代码属性。这样,您的文件公司代码是否绑定实际上并不重要。

于 2012-05-09T17:41:13.863 回答
0

我有一个类似的问题,我想要客户端验证,但不想要发布的字段,因为它是一个对象列表,并且发布结构不支持正常的验证器。
尽管如此,我还是受到了这个问题和答案的启发,并找到了一个解决方案,您可以在其中添加另一个输入字段(包含 HTML.HiddenFor 为启用不显眼的验证而生成的所有 HTML5 标签)和 Html.Validator 用于不存在的模型属性,因此回发中的 MVC 绑定器将忽略它。
我还为真实属性添加了一个 Html.ValidatorFor ,以便回发验证可以在某个地方呈现,因为我的其他验证标记指向不同的标记(理论上)

于 2012-06-27T22:22:44.363 回答