Asp.net mvc 3 MVC3动态数据注释属性StringLength

Asp.net mvc 3 MVC3动态数据注释属性StringLength,asp.net-mvc-3,entity-framework-4,data-annotations,Asp.net Mvc 3,Entity Framework 4,Data Annotations,更新#3:整个问题 我有一个HB班: public class HB { public int Id { get; set; } [StringLength(3000)] public string Text { get; set; } public Title Title { get; set; } } 名称: public class Title { public int Id { get; set; } public s

更新#3:整个问题

我有一个HB班:

    public class HB
{
    public int Id { get; set; }

    [StringLength(3000)]
    public string Text { get; set; }
    public Title Title { get; set; }

}
名称:

    public class Title
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int MaxChar { get; set; }   
}
在你可以写一篇HB(这是一篇文章)之前,你必须选择你的标题,这样你的HB.Text的StringLength就可以确定了。也就是说,这篇文章只能有一定数量的字符,取决于作者的“标题”。示例:标题1只能写1000个字符的“HB”,标题2可以写3000个字符的“HB”。所以这意味着
StringLength
必须来自
Title.MaxChar
。最聪明的方法是什么

标题实体是将存储在数据库中的带前缀的数据

非常清楚地说,我想要实现的是:
[StringLength(Title.MaxChar)]


我在Webforms中为这个机制做了无数次的结构/设计,我的大脑无法适应mvc,所以希望能得到一些帮助。代码将更受欢迎。

非常确定这是不可能的。这给我的印象是,它试图将业务逻辑强制到属于控制器的模型中

在这种情况下,我将在Text属性
[StringLength(3000)]
上设置属性。在控制器中,在验证过程中,我会写下以下内容:

public ActionResult (HB model)
{
    if (model.Text.Length > model.Title.MaxChar){
        ModelState.AddModelError("Text", string.Format("Text for this Title cannot exceed {0} characters.", model.Title.MaxChar));
    }

    if (ModelState.IsValid) 
    {
        //do stuff
        return RedirectToAction("Index"); //or something
    } 
    else 
    {
        return View(model);
    }
}
我相信这将完成你正在努力做的事情。现在,对于标题对象,我将在您的模型中稍微平展一下:

public class HB
{
    #region Base Properties

    public int Id { get; set; }

    [StringLength(3000)]
    public string Text { get; set; }

    #endregion

    #region Title Properties

    public int TitleId { get; set; }
    public string TitleName { get; set; }
    public int TitleMaxChar { get; set; }

    #endregion
}

这是假设您需要在视图中显示该信息。如果您只需要引用它进行业务逻辑验证,只需使用
TitleId
属性,并在需要时在控制器中实例化
Title
对象。如果这些属性不可编辑,请不要忘记对其进行隐藏输入

你想干什么?我不清楚。@jeremy,
[StringLength(由视图设置)]
不,这就是你想做的事情。你在这里的目的是什么?为什么要尝试动态更改属性的字符串长度?我想你可能是在尝试做一些已经存在机制的事情。@Jeremy-很抱歉回答晚了,伙计们,我真的很忙。我更新了整个问题,所以如果你能再看一次,那就太好了。顺便说一句,我注意到我在代码中放了一个bug;刚刚修好了。此外,模型中的Title对象可能存在问题。在模型中传递复杂对象可能会很麻烦。考虑只向标题引用ID,并根据需要从数据存储中获取信息。没问题。但是是的,标题对象。Null reference:S.我用我在中的方式更新了问题,但是在if语句中hb.Title.MaxChar为Null。请看一看:)酷。但是,扁平化的方法是行不通的。我需要标题类作为它自己的实体,因为它们是将存储在db中的前缀数据,并且我需要em上的CRUD函数。我希望应用程序以这种方式工作:在你可以写HB(文章)之前,你必须选择你的标题,所以你的HB.Text有一定的MaxLength。别介意Jeremy。你的解决方案和我的东西结合起来很有效。我只是忘记了您可能提到的hideformer=>model.Title。非常感谢你抽出时间。我现在还有其他问题,但我想我自己能处理:)不,我不能处理。现在它每次创建一个新的HB时都会创建一个新的标题记录。查看[链接]谢谢