【问题标题】:ASP.Net MVC - Helper lambdaexpression post actionASP.Net MVC - Helper lambdaexpression post action
【发布时间】:2011-07-24 02:52:17
【问题描述】:

我使用 lambda 表达式创建了这个帮助器方法,以便在视图中使用强类型帮助器

助手


        public static string DateFor<TModel, TDate>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TDate>> expression)
        {
            ModelMetadata data = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
            StringBuilder sb = new StringBuilder();
            ...
            //code that creates three dropdownlist (day, month and year)
            ...
        }

查看


        <%= Html.LabelFor(model => model.DataNascita) %>

控制器


        [HttpPost]
        public ActionResult Edit(int id, Account MyAccount)
        {
            ...
            return View(...);
        }

我的问题是 MyAccount.DataNascita 没有设置为我在编辑表单中选择的值(日期的最小值.. 例如 1900/01/01)。

如何在编辑帖子操作中绑定它?

【问题讨论】:

  • 我无法理解这个问题。 MyAccount.DataNascita is not set 你的意思是辅助方法没有返回值还是模型没有在回发时填充?
  • ....模型在回发时没有填充!
  • 现在你明白了吗?请问你能帮帮我吗?谢谢.....
  • 是的,但我希望礼貌一点。我知道您没有使用网络表单,也没有这样的回发,但我问过数据是否在发布到控制器后加载。
  • 对不起,我不想变得粗鲁,但我的英语并不完美:)。但是属性 DataNascita(日期时间类型)在发布到控制器后始终为 0001/01/01,而其他属性的值正确......再次抱歉!

标签: asp.net-mvc asp.net-mvc-2 extension-methods strong-typing nhlambdaextensions


【解决方案1】:

我认为您所追求的是自定义 ModelBinder,它将解析传入的发布数据并将其转换为您的模型的 DateTime。

【讨论】:

  • 非常感谢。我认为要走的路是自定义模型绑定器!我发现了这个:link
【解决方案2】:

在您看来,您说您正在为某事输出一个 Label,但您的问题是为什么该值没有保留在 posting 上。

我认为您至少需要说Html.EditorFor(...),但您可能想使用您编写的辅助方法:

<%: Html.DateFor(model => model.DataNascita) %>

但是,如果不知道模型上 DataNascita 属性的数据类型,就不可能准确地说出这里发生了什么。

【讨论】:

  • MyAccount.DataNascita 是一个 DateTime 属性。我创建了一个助手,因为我想要一个 3 个下拉列表(带有一个独特的助手),它们分别对应天、月和年。是的,我的问题是如何在后期操作期间维护模型中的值(在我的助手的视图中设置)
  • 我认为您应该在这里使用创建自己的编辑器模板的功能,然后按照 Alberto 的建议使用模型绑定器。
【解决方案3】:

我建议你使用Jquery Datepicker

您可以使用Jquery Themeroller对其进行自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多