Razor 获取HTML5日期输入字段并传递给.net控制器

Razor 获取HTML5日期输入字段并传递给.net控制器,razor,asp.net-core-mvc,asp.net-core-2.0,Razor,Asp.net Core Mvc,Asp.net Core 2.0,在我的razor页面上,我有一个简单的日期选择器,如下所示: <input type="date" name="lessonsStart"> <a asp-action="LessonIndex" asp-route-id="@item.Id">@Html.DisplayFor(modelItem => item.Name)</a> public IActionResult LessonIndex(datetime startDate) {

在我的razor页面上,我有一个简单的日期选择器,如下所示:

<input type="date" name="lessonsStart">
<a asp-action="LessonIndex" asp-route-id="@item.Id">@Html.DisplayFor(modelItem => item.Name)</a>
public IActionResult LessonIndex(datetime startDate) {

    var response = getLessons(startDate);

      return response.Results;
   } 
是否有我需要使用的特定格式

请注意,模型中未使用日期,只需将其发送给控制器即可


谢谢

假设这与mvc相关,控制器将有一个与post相关联的方法,您将执行post将表单中的数据返回控制器。这使用javascript将数据发布到LessonIndex方法

    <div class="demo-section k-content">
    <h4>Remind me on</h4>
@(Html.Kendo().DateTimePicker()
        .Name("datetimepicker")
        .Value(DateTime.Now)
        .HtmlAttributes(new { style = "width: 100%", title = "datetimepicker" })
        .DateInput()
)
</div>

请注意,模型中未使用日期,只需将其发送给控制器即可

您可以使用ajax将日期作为QueryString传递给控制器中的方法

下面是测试示例

<input type="date" name="lessonsStart" id="lessonsStart">

@section Scripts
{
<script type="text/javascript">
    $("#lessonsStart").change(function () {
        var inputDate = new Date(this.value).toDateString();
        $.ajax({
            type: "post",
            url: "/ControllerName/lessonindex?startdate=" + inputDate,
            success: function () { }
        });
    });

</script>
} 

对不起,什么是剑道?感谢“lessonStart”是否与您的razorpage或controller中的有效名称相对应?因为你把mvc列为你的目标标签之一。我知道你想做什么,但如果你能提供你的控制器的样子,我需要一些澄清和更多的资料。还有,您是否有与所讨论的页面相关联的模型?@mvermef lessonStart正是我给html元素的名称。这是一个RazorPage或Mvc控制器,你想让它返回到它吗?实现1个javascript或2个post表单的2种方法。@mvermef我还在控制器中添加了需要日期选择器中的日期的方法。请注意,没有与此视图关联的模型。您好,@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf做什么?我以前从未见过这样的用法。需要吗?谢谢我尝试了代码,点击Go按钮后,出现以下错误:localhost:44304/LessonController/LessonIndex?lessonStart=无效%20DateRight,因为路由应该是Lesson/LessonIndex?lessonStart=发送的日期。至于XSRF,它的跨站点请求伪造预防措施,并不是真正需要的,而是通过javascript发布所有东西的好主意。如果您在哪里使用,这会自动考虑,但是由于您在没有表单的情况下执行此操作的方式很好,因此必须使用javascript。如果LessonController确实出现在url中,则表示该路由设计错误或格式不正确。哦,谢谢你,我不知道你必须删除“controller”这个词。谢谢现在可以了!
<input type="date" id="lessonStart" name="lessonStart" />
<input type="Submit" id="PostButton" name="PostButton" Value="Go" />
@section Scripts{ // razor section at the bottom of mvc page 'cshtml'.
<script type="javascript">
 $(function(){   
   $("#PostButton").click(function(){
      var url = '@Url.Action("LessonIndex", "Lesson")';  //assuming controller is named Lesson
       var date= new Date(this.value).ToDateString();
      $.ajax({
        url: url, 
        type: "POST",
        data: "lessonStart=" + date,
        headers:{
        "RequestVerificationToken": '@GetAntiXsrfRequestToken()'
        },
        success: function(response){
           console.log(response);
        },
        error: function(e){
          console.log(e.error);
        }
      });
   });
 }
</script>
}

public class LessonController : Controller{

 [HttpPost]
 [AutoValidateAntiforgeryToken]
 public IActionResult LessonIndex(DateTime lessonStart){
          var response = getLessons(lessonStart);
    return View(response.results);
 }

}
<input type="date" name="lessonsStart" id="lessonsStart">

@section Scripts
{
<script type="text/javascript">
    $("#lessonsStart").change(function () {
        var inputDate = new Date(this.value).toDateString();
        $.ajax({
            type: "post",
            url: "/ControllerName/lessonindex?startdate=" + inputDate,
            success: function () { }
        });
    });

</script>
} 
 [HttpPost]
    public IActionResult LessonIndex(DateTime startDate)
    {

        return Json(startDate);
    }