C# 从数据库列填充列表

C# 从数据库列填充列表,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我目前正在从事一个asp.net mvc项目,该项目允许用户仅从日历中选择可用日期以预订特定服务。我目前有一个Datepicker.cs模型,它包含一个DateTime日期字段和一个int Id字段,还有一个DbContext类,我使用它来持久化和检索这些数据 namespace Calendar.Models { public class CalendarDb : DbContext { public DbSet<Datepicker> Dates { get; s

我目前正在从事一个asp.net mvc项目,该项目允许用户仅从日历中选择可用日期以预订特定服务。我目前有一个Datepicker.cs模型,它包含一个DateTime日期字段和一个int Id字段,还有一个DbContext类,我使用它来持久化和检索这些数据

namespace Calendar.Models
{
  public class CalendarDb : DbContext
  {
    public DbSet<Datepicker> Dates { get; set; }
  }
}
视图的控制器:

    [HttpGet]
    public ActionResult Create()
    {
       var model = _db.Dates.ToList();
       return View(model);
    }
当前的My Create.cshtml视图:

@model Calendar.Models.Datepicker

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
    <h4>Datepicker</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.DtmDate, htmlAttributes: new { @class 
= "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.DtmDate, new { htmlAttributes = 
new { @class = "form-control1" } })
            @Html.ValidationMessageFor(model => model.DtmDate, "", new { 
@class = "text-danger" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.UserId, htmlAttributes: new { @class = 
"control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.UserId, new { htmlAttributes = 
new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.UserId, "", new { 
@class = "text-danger" })
         </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>

<link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />

@section scripts {
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
<script>
    jQuery(function(){
        var enableDays = ["11-07-2019", "12-07-2019"];

        function enableAllTheseDays(date) {
            var sdate = $.datepicker.formatDate('dd-mm-yy', date)
            console.log(sdate)
            if ($.inArray(sdate, enableDays) != -1) {
                return [true];
            }
            return [false];
        }

        $(".form-control1").datepicker({
            dateFormat: "dd/MM/yy",
            beforeShowDay: enableAllTheseDays

        });
    });

</script>

@Scripts.Render("~/bundles/jqueryval")
}

<style>
.my-class a {
     background-color: #07ea69 !important;
     background-image :none !important;
     color: #ffffff !important;
}
</style>

这是你如何做到这一点的想法

首先创建一个返回列表的方法 范例

 [HttpPost]
    public ActionResult GetDates()
    {

        return Json(CalendarDb.Dates.Select(x=> x.DtmDate.ToString("dd-MM-yyyy")));
    }
现在,当您创建datepickider时,您将需要此列表,例如enableDays

现在,如果你想要一个MVCModol解决方案,你可以这样做

创建一个包含日期的modol,并简单地将其转换为json

enableDays  =@Html.Raw(Json.Encode(modol.Dates.ToString("dd-MM-yyyy")))
// now create your DatePicker.

您的模型类型是一个列表,因为行var model=\u db.Dates.ToList;在你的控制器里。您需要调整视图的模型声明以匹配

改变

@model Calendar.Models.Datepicker


然后运行它。在呈现的HTML中,您应该可以看到数据库中的日期很好地嵌入到JavaScript中,这将在日期选择器中启用正确的日期。显然,您需要处理边缘情况,例如表中没有行,或者其中一行的日期为空。但这应该可以让你开始了。

我不明白你被卡在了哪一部分。您似乎知道如何从数据库将数据输入到应用程序中。您是否将其放在传递给视图的模型中?您知道如何从视图中的模型中获取值并在JavaScript中使用它们吗?您需要哪一个特定部分的帮助?是的,您只需将列表从代码传递到视图中即可。其他明智的做法是将该列表转换为javascript列表并使用它。@Craig,post可能会有所帮助。@mason Hi mate感谢您的回复。是的,我将Datepicker模型传递到视图@model Calendar.Models.Datepicker中。至于获取视图中的值并利用它们,即将日期放入某种排序集合中供日期选择器使用,我不确定如何实现。如果您定义了一个包含已启用天数的JSON数组,将非常感谢您的帮助。现在这是硬编码的,但是您想使用模型中的值吗?您可以简单地使用Razor语法从模型中获取值,并将它们插入到标记中,而不是硬编码的值。谢谢您的回复!我已经尝试过:[HttpGet]public ActionResult Create{return Json_db.Dates.Selectx=>x.DtmDate,JsonRequestBehavior.AllowGet;}。虽然现在当我进入视图时,原始日期显示在屏幕上。好的,我看格式不对。我编辑了我的答案,请尝试x.DtmDate.ToStringdd-MM-yyyy。这将返回正确的格式供您使用。另外,请阅读这里关于如何设置日期的内容。当你是一个救生员时,我会在回家后实现这一点。谢谢你抽出时间!我将模型更改为type List,尽管现在Html助手“LabelFor”和“EditorFor”将不起作用,因为我假设他们需要的是模型而不是列表。错误如下:“列表”不包含与UserId相同的“DtmDate”定义。有没有快速解决这个问题的方法?因为我仍然需要一个标签和字段供用户选择他们的日期。再次感谢梅森的帮助@克雷格:肯定有个快速解决办法。您需要决定视图是需要单个日期选择器还是需要传递给它的列表。如果它需要一个列表,那么直接使用LabelFor和EditorFor将不起作用。花一分钟坐下来,实际规划视图的用途、输入模型以及结果表单值。视图应允许用户使用日历选择可用日期,然后该日期将存储到不同的预订表中。我只是认为必须将日期列表传递到视图中,以便用所有可用日期填充日历。。是否可以将Datepicker模型传递到视图中,并使用它从db获取所有日期?或者是否有一种方法可以存储用户选择的日期而不使用labelFor/editorFor,这样我仍然可以在列表中传递?
enableDays  =@Html.Raw(Json.Encode(modol.Dates.ToString("dd-MM-yyyy")))
// now create your DatePicker.
@model Calendar.Models.Datepicker
@model List<Calendar.Models.Datepicker>
var enableDays = ["11-07-2019", "12-07-2019"];
var enableDays = [' @Html.Raw(string.Join("','", Model.Select(d => d.DtmDate.ToString("MM-dd-yyyy"))) '];