Asp.net mvc 4 在mvc4中将参数从视图传递到控制器

Asp.net mvc 4 在mvc4中将参数从视图传递到控制器,asp.net-mvc-4,Asp.net Mvc 4,在MVC4中将参数从视图传递到控制器时,我遇到了一个令人困惑的问题。问题是我创建了一个视图,并创建了以下代码: <% using (Html.BeginForm("DisplaySummaryFigures", "Report", FormMethod.Post, new { Par1 = "some", Par2 = "some" })) { %> <%: Html.ValidationSummary(true)%> <table id=

在MVC4中将参数从视图传递到控制器时,我遇到了一个令人困惑的问题。问题是我创建了一个视图,并创建了以下代码:

 <% using (Html.BeginForm("DisplaySummaryFigures", "Report", FormMethod.Post, new { Par1 = "some", Par2 = "some" }))
  { %>

    <%: Html.ValidationSummary(true)%>

    <table id="tblInsertDates">
        <tr>
            <th>
                <asp:Label ID="Label1" runat="server" Text="lblStratDate"> Insert the Start Date:</asp:Label>
                <input type="date" name="TxtStartDate" value="" />
            </th>
            <th>
                <asp:Label ID="Label2" runat="server" Text="lblEndDate" Style="padding-left: 5px">Insert the End Date:</asp:Label>
                <input type="date" name="TxtEndDate" value="" /><br />
            </th>
        </tr>
        <tr>
            <td>
                <input type="submit" name="SubmitDates" value="Enter" /><br />

            </td>

        </tr>
    </table>
当我运行程序时,返回以下错误:(:

参数名称:parametersere

有什么想法吗??
提前感谢

框架正在尝试填充输入参数的值,但是它遇到了日期值为空的问题(可能是因为客户端没有为日期提交任何值,例如字段尚未设置)。您可以通过确保字段中输入值来解决此问题(如默认值或如果其中任何一个符合您的业务模型,则将其设置为必需值)或将输入类型设置为可空(DateTime?)而不是DateTime。

框架正在尝试填充输入参数的值,但它遇到了日期为空的问题(可能是因为客户端没有为其提交任何值,例如未设置字段)。您可以通过确保字段中输入了值(如默认值或如果其中任何一个符合您的业务模型,则将其设置为必需值)或使输入类型为空(DateTime?)来解决此问题而不是DateTime。

我建议您创建一个类似的模型,并使用强类型视图

public class MyModel
{
    [Required]  
    public DateTime StartDate {get; set;}

    [Required]  
    public DateTime EndDate {get; set;}
}
什么时候传这个

[HttpGet]
public ActionResult ExportSummaryFiguresToCSV()
{
    return View(new MyModel());
}
视图:


我建议您创建一个类似的模型,并使用强类型视图

public class MyModel
{
    [Required]  
    public DateTime StartDate {get; set;}

    [Required]  
    public DateTime EndDate {get; set;}
}
什么时候传这个

[HttpGet]
public ActionResult ExportSummaryFiguresToCSV()
{
    return View(new MyModel());
}
视图:


调用中可能会忽略已发布的参数。绑定器将无法生成任何有意义的值(默认值除外)

这就是为什么您必须通过允许使用
null
值调用它来明确它

[HttpPost]
public ActionResult ExportSummaryFiguresToCSV(
   DateTime? TxtStartDateParam, 
   DateTime? TxtEndDateParam)
{
    // first, get values  
    DateTime TxtStartDate = 
      TxtStartDateParam != null ? TxtStartDateParam.Value : __put a default value here__;
    DateTime TxtEndDate   = 
      TxtEndDateParam != null ? TxtEndDateParam.Value : __put a default value here__;

    // this follows unchanged
    StringWriter sw = new StringWriter();
    DateTime dtStartDateFromUser = TxtStartDate;
    DateTime dtEndDateFromUser   = TxtEndDate;

调用中可能会忽略已发布的参数。绑定器将无法生成任何有意义的值(默认值除外)

这就是为什么您必须通过允许使用
null
值调用它来明确它

[HttpPost]
public ActionResult ExportSummaryFiguresToCSV(
   DateTime? TxtStartDateParam, 
   DateTime? TxtEndDateParam)
{
    // first, get values  
    DateTime TxtStartDate = 
      TxtStartDateParam != null ? TxtStartDateParam.Value : __put a default value here__;
    DateTime TxtEndDate   = 
      TxtEndDateParam != null ? TxtEndDateParam.Value : __put a default value here__;

    // this follows unchanged
    StringWriter sw = new StringWriter();
    DateTime dtStartDateFromUser = TxtStartDate;
    DateTime dtEndDateFromUser   = TxtEndDate;

谢谢你的帮助,但是你在这里输入默认值是什么意思?你能举个例子吗?一个例子是new DateTime(2000,1,1)或DateTime.Now谢谢你的帮助:)谢谢你的帮助,但是你在这里输入默认值是什么意思?你能举个例子吗?一个例子是new DateTime(2000,1,1)或DateTime.Now感谢您的帮助:)问题当在客户端使用此方法时,他们填充不同格式的数据时间。所以当您在控制器上获得值时。将是错误问题当在客户端使用此方法时,他们填充不同格式的数据时间。所以当您在控制器上获得值时。将是错误
[HttpPost]
public ActionResult ExportSummaryFiguresToCSV(
   DateTime? TxtStartDateParam, 
   DateTime? TxtEndDateParam)
{
    // first, get values  
    DateTime TxtStartDate = 
      TxtStartDateParam != null ? TxtStartDateParam.Value : __put a default value here__;
    DateTime TxtEndDate   = 
      TxtEndDateParam != null ? TxtEndDateParam.Value : __put a default value here__;

    // this follows unchanged
    StringWriter sw = new StringWriter();
    DateTime dtStartDateFromUser = TxtStartDate;
    DateTime dtEndDateFromUser   = TxtEndDate;