繁体   English   中英

MVC控制器参数不是必需的,而是可选的

[英]MVC Controller parameters not required but optional

嗨,我从视图中使用HttpPost将一些参数发送到控制器,数据库根据这些给定参数进行过滤。 但是参数应该是可选的,如果没有给出,控制器将忽略它们。 但这似乎不可能吗?

视图

@using (Html.BeginForm("Index", "Logbook")) {
 @Html.ValidationSummary(true)
       <div class="col-lg-3">
           <div class="panel panel-default">
               <div class="panel-heading">
                   <i class="fa fa-bell fa-fw"></i> Filter logbook
               </div>
               <div class="panel-body">
                   <div class="col-lg-5">
                        @Html.Label("Filter on room: ")
                        @Html.Label("Filter on date: ")
                   </div>
                   <div class="col-lg-6"> 
                        @Html.DropDownList("dropdownlist",Eindwerk.Controllers.RoomController.GetRooms(),new { @class = "btn btn-default-dropdown-toggle"})
                        @Html.TextBox("datepicker","", new { @class = "form-control" })
                   </div>
                <div>
                <button type="submit" class="btn btn-outline btn-primary btn-lg btn-block">Filter logbook</button>
                @Html.ActionLink("Remove Filter", "Index","FilterClear",new { @class = "btn btn-outline btn-success btn-lg btn-block" })
           </div>   

}

CONTROLLER

我认为可以仅检查参数是否为null并相应地更改函数:

[HttpPost]
public ActionResult Index(string dropdownlist, DateTime datepicker)
{
    if(dropdownlist != null && datepicker != null)
    return View(db.Logbook.Where(p => p.Room == dropdownlist && p.Time.Day == datepicker.Month).OrderByDescending(a => a.Id).ToList());

    if(dropdownlist != null && datepicker == null)
    return View(db.Logbook.Where(p => p.Room == dropdownlist).OrderByDescending(a => a.Id).ToList());

    if(dropdownlist == null && datepicker != null)
    return View(db.Logbook.Where(p => p.Time.Day == datepicker.Month).OrderByDescending(a => a.Id).ToList());

    else
    return View(db.Logbook.OrderByDescending(p => p.Id).ToList());

}

但是我立即得到一个错误,应该给出参数,是否可以将这些参数设置为可选参数?

将参数声明为可为空

public ActionResult Index(string dropdownlist, DateTime? datepicker)

声明可为空的参数

public ActionResult Index(string? dropdownlist, DateTime? datepicker)

您可以通过将参数设置为可选参数并分配默认值null来解决此问题:

public ActionResult Index(string dropdownlist, DateTime? datepicker = null){}

试试这个可以工作

公共ActionResult索引(字符串dropdownlist = null,DateTime datepicker = null)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM