【问题标题】:asp.net core 2 - Custom model binding for specific fieldasp.net core 2 - 特定字段的自定义模型绑定
【发布时间】:2017-10-31 22:41:25
【问题描述】:

我有一个模型:

public class ChartFilter
{
    [Required(ErrorMessage = "Tiene que especificar una fecha")]
    [DataType(DataType.DateTime, ErrorMessage = "La fecha es invalido")]
    [Display(Name = "Fecha desde")]
    public DateTime dateFrom { get; set; }

    [Required(ErrorMessage = "Tiene que especificar una fecha")]
    [DataType(DataType.DateTime, ErrorMessage = "La fecha es invalido")]
    [Display(Name = "Fecha hasta")]
    public DateTime dateTo { get; set; }
}

我的处理程序/操作:

 public void OnGetFilter([FromQuery(Name = "ChartFilterForForm")]ChartFilter chartFilter) {
        if (ModelState.IsValid)
        {
            initComprobantes(chartFilter);
        }
        else {
            initComprobantes();
        }
    }

我的表格:

<form name="filter" class="form-horizontal">
        <div asp-validation-summary="All"></div>
        <div class="form-group">
            <label class="col-lg-1" asp-for="ChartFilterForForm.dateFrom"></label>

            <div class="col-lg-4">
                <input class="form-control" asp-format="{0:d \de MMMM \de yyyy}" asp-for="ChartFilterForForm.dateFrom" />
            </div>

            <label class="col-lg-offset-2 col-lg-1" asp-for="ChartFilterForForm.dateTo"></label>

            <div class="col-lg-4">
                <input type="datetime" class="form-control" asp-format="{0:d \de MMMM \de yyyy}" asp-for="ChartFilterForForm.dateTo" />
            </div>
        </div>

        <div class="form-group" style="margin-top: 30px">
            <input asp-page-handler="Filter" class="btn btn-default btn-block" type="submit" value="Filtrar" />
        </div>
    </form>

问题是,asp 无法使用我发送的日期自动验证模型。它给了我错误The value '4 de eneror de 2017' is not valid for Fecha desde.

我尝试了自定义绑定。但要使用自定义绑定,我必须手动设置字段值,例如从那里enter link description here。但我只想设置日期值。

我在网上看到很多关于设置语言环境的文章和帖子。但我的问题不是本地的。因为我使用自己的日期格式,例如:2017 年 1 月 1 日或 2017 年 1 月 1 日星期一。例如:我使用 Symfony,在 Symfony 中,我可以在框架验证表单之前更改控制器中的表单值。这就是我想用 asp.net core 做的事情。

我怎样才能只为 DateTime 字段执行此操作?

【问题讨论】:

  • 链接返回 404。
  • 我将链接设置为本地 en-en 而不是 en-us。现在好了。

标签: c# razor asp.net-core-2.0


【解决方案1】:

由于语言格式不同,我不认为 c# DateTime 可以自动解析您的格式。如果浏览器语言设置正确,输入表单应该会自动转换格式。但是,在您的示例中,第一个日期输入中没有 type,这可能就是它甚至不尝试解析的原因。

有一个新的date 输入类型,它删除了时间元素。如果您使用它,您的用户将获得一个日期选择器,而不是输入一个字符串。

【讨论】:

  • date 输入类型在 Firefox 上不起作用。我使用 jQuery UI 作为日期选择器。但这不是问题。我在网上看到很多关于设置语言环境的文章和帖子。但我的问题不是本地的。因为我使用自己的日期格式,例如:2017 年 1 月 1 日或 2017 年 1 月 1 日星期一。例如:我使用 Symfony,在 Symfony 中,我可以在框架验证表单之前更改控制器中的表单值。这就是我想用 asp.net core 做的事情。
  • 这与 HTML 日期输入类型无关,因为我收到两个日期输入的错误。并使用该格式:2017/1/25 work
  • 就像我说的,我只是不想手动做这些事情,因为我的表单会很大。我更喜欢 asp.net 为我做这件事。但是,如果我手动执行此操作,则该代码可以解决问题:dateTime = DateTime.ParseExact("wednesday 25 january of 2017", "dddd d MMMM \\o\\f yyyy", null); 我只想在我的 DateTime 字段上执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2017-02-09
相关资源
最近更新 更多