首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的字符串太长时,为什么MVC调用我的模型上的set方法?

当我的字符串太长时,为什么MVC调用我的模型上的set方法?
EN

Stack Overflow用户
提问于 2012-05-28 09:51:46
回答 1查看 317关注 0票数 0

在ASP.NET MVC应用程序中,我有一个定义如下的模型:

代码语言:javascript
复制
public class TestModel
{
    private string _firstName;

    [DisplayName("First Name")]
    [StringLength(20)]
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                if (value.Length > 20)
                    throw new Exception("Too long");

            _firstName = value;
        }
    }
}

在我的控制器Update操作方法中,我有以下代码:

代码语言:javascript
复制
[HttpPost]
public ActionResult Update()
{
    var tm = new TestModel();
    if (ModelState.IsValid)
    {
        if (TryUpdateModel(tm))
        {
            // Save to the DB
        }
    }

    return View("Test", tm);
}

问题是,当我在视图的文本框中输入一个超过20个字符的值时,我希望MVC不会尝试在我的模型上设置属性(然后抛出一个异常,因为它太长了,不适合DB列)。在实际尝试设置该属性之前,我会认为它会被ModelState.IsValid测试停止。

注意,我在这里模拟了一个实际的ORM - LLBLGenPro -它对具有长度的数据库列的生成属性执行的操作-如果您试图设置一个太长的值,它会抛出一个异常。

除了修改LLBLGen的模板之外,我还应该如何解决这个问题?

这是ASP.NET MVC的正常行为吗?

EN

回答 1

Stack Overflow用户

发布于 2012-06-12 19:53:41

正如所提供的,您的代码没有从视图接收模型实例,而您是在您的代码中创建类的实例,因此无法判断

这段代码:

代码语言:javascript
复制
var tm = new TestModel();   

创建Testmodel的实例,但它并没有绑定到从发布的表单接收到的值。您的操作应该基本如下所示

代码语言:javascript
复制
public ActionResult Update(TestModel model) 

这是mvc将尝试验证的模型的实例。

也许您应该发布整个代码(包括视图),以查看是否缺少其他内容,但是使用到目前为止提供的代码,您将永远不会在存储库中更新表单值,也不会抛出异常,因为FirstName将保持为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10778574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档