【问题标题】:filtering grid with a datetime range asp.net mvc过滤具有日期时间范围的网格 asp.net mvc
【发布时间】:2019-03-19 16:07:16
【问题描述】:

我是 asp.net MVC 的初学者。我尝试创建一个允许过滤数据网格的应用程序。当我想根据日期过滤数据时出现错误(在我的应用程序中,该字段是“asked_date”)。 我在控制器中创建了 2 个参数:DateTime SelectedDateStart、DateTime SelectedDateEnd。在控制器中,我使用这样的参数:

    public ActionResult Index(string SortOrder, string SelectedDesk, string SelectedProgramme, string SelectedCountry, DateTime SelectedDateStart, DateTime SelectedDateEnd)
    {
        var missions = from s in db.missions_supportmission
                       select s;

        //Filtres 
        if (!String.IsNullOrEmpty(SelectedDesk))
        {
            missions = db.missions_supportmission.Include(s => s.organization_desk).Where(a => a.desk_id == SelectedDesk);
        }
        if (!String.IsNullOrEmpty(SelectedProgramme))
        {
            missions = db.missions_supportmission.Include(s => s.organization_programme).Where(a => a.programme_id== SelectedProgramme);
        }
        if (!String.IsNullOrEmpty(SelectedCountry))
        {
            missions = db.missions_supportmission.Include(s => s.organization_hi_country).Where(a => a.country_id == SelectedCountry);
        }
        //Filtres dates
        missions = db.missions_supportmission.Where(a => a.asked_date > SelectedDateStart).Where(a => a.asked_date < SelectedDateEnd);
        ViewBag.SelectedDateStart = SelectedDateStart;
        ViewBag.SelectedDateEnd = SelectedDateEnd;

        return View(missions.ToList());
    }

在我看来是这样的:

    <h3>Date</h3>
    <div class="form-group">
        <label class="control-label col-md-4" for="Date">De</label>
        <div class="col-md-8">
            <input type="date" class="form-Date" id="id" value="ViewBag.DateStart" onchange="form.submit();">
        </div>
        <label class="control-label col-md-4" for="Date">A</label>
        <div class="col-md-8">
            <input type="date" class="form-Date" id="id" value="ViewBag.DateEnd" onchange="form.submit();">
        </div>
    </div>

在课堂上我有这个:

    public partial class missions_supportmission 
    {public int id { get; set; }
    public System.DateTime asked_date { get; set; }

调试时出现以下错误:

“System.ArgumentException:参数字典包含方法'System.Web.Mvc.ActionResult Index(System.String,System.String, System.String, System.String, System.DateTime, System.DateTime)' in 'MissionsDF.Controllers.MissionsController'。可选参数必须是引用类型、可空类型或声明为可选参数。 Nom du paramètre : 参数"

感谢您的帮助!

【问题讨论】:

  • 异常表明SelectedDateStart包含空值,它需要DateTime?数据类型。另外&lt;input type="date" class="form-Date" id="id" value="ViewBag.DateStart" onchange="form.submit();"&gt; 不是创建DateTime 输入的好方法,为什么不使用@Html.TextBoxFor@Html.EditorFor 助手?
  • 您的输入没有name 属性 - 它们不会回发任何内容。
  • 您还有其他问题 - onchange="form.submit();" 定义是多余的,您可以简单地从类选择器中处理它,或者添加一个按钮来处理表单提交。
  • 我尝试像这样更改我的代码:@Html.Editor("SelectedDateStart", new { onchange = "form.submit();" });我要更改控制器中的某些内容吗?
  • 如果DateTime编辑器可以有空值,请确保参数声明为DateTime?并检查空值。否则你需要为DateTime设置默认值以避免错误。

标签: asp.net-mvc


【解决方案1】:

我找到了解决方案。 我决定将参数“SelectedDateStart”和“SelectedDateEnd”声明为DateTime?,并像这样在控制器中检查null(同时,我决定用viewmodel方法替换viewbags):

if (model.SelectedDateStart.HasValue && model.SelectedDateEnd.HasValue)
        {
            model.OnePageOfMissions = db.missions_supportmission
                     .Where(a => a.asked_date > model.SelectedDateStart && a.asked_date<model.SelectedDateEnd)
                     .OrderBy(a => a.asked_date)
                     .Select(s => s).ToPagedList(pageNumber, 10);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多