asp.net-mvc - MVC HTTP Post 输入返回 null

标签 asp.net-mvc

Controller :

public ActionResult MyController()
{
    ViewBag.DateNow = DateTime.Now.ToString("yyyy-MM-dd");
}

[HTTPPost]
public ActionResult MyController(string fromDate)
{
    ViewBag.DateNow = fromDate;
}

查看:

@using (Html.BeginForm("MyController", "Account", FormMethod.Post))
{
    //datepicker class: bootstrap-datepicker.js
    <input id="fromDate" type="text" class="datepicker" />

    <buttontype="submit" value="Search" class="btn btn btn-primary">
        Search
    </button>
}

我想要实现的是在 POST 之前传递到 ViewBag.DateNow 的数据是当前日期,并且它成功地引入到 View 中。但是,当我尝试填写输入表单(例如:2016-05-10)并单击“搜索”按钮时。但似乎 fromDate 字符串返回 NullReferenceException 。我正在网上尝试一些解决方案,但仍然无法正确解决,这就是我决定将其发布的原因。提前致谢!

最佳答案

要使其正常工作,您需要在文本框中指定name属性。它需要与 HTTP post 操作方法中的输入变量(即 fromDate)具有相同的值。当前 id 属性设置为 fromDate:

<input id="fromDate" name="fromDate" type="text" value="@ViewBag.DateNow" />

如果您不指定此 name 属性,那么当您发布表单时,fromDate 将始终为 null。像上面那样指定它将确保 fromDate 始终有一个值(如果输入)。

我想在这里说点题外话,我想建议您使用 View 模型来提交表单。您可以将 View 模型作为输入参数,而不是在操作方法中使用单独的输入变量。

我在这里写了一个关于什么是 View 模型的答案,如果有时间请去阅读:

What is ViewModel in MVC?

在您的示例中,我将拥有一个仅包含一个属性的 View 模型,即 FromDateFromDate 将包含文本框中的值。它被设置为字符串,因为您想向其传递格式化的日期值:

public class TestModel
{
     public string FromDate { get; set; }
}

此值将在您的 HTTP get 操作方法中设置, View 模型将发送到 View :

public ActionResult Index()
{
     TestModel model = new TestModel();
     model.FromDate = DateTime.Now.ToString("yyyy-MM-dd");

     return View(model);
}

在您看来,您将接受此 View 模型并相应地创建表单:

@model WebApplication_Test.Models.TestModel

@using (Html.BeginForm())
{
     @Html.TextBoxFor(m => m.FromDate)
     <button type="submit">Search</button>
}

当您提交此表单时,您需要一个 HTTP post 操作方法来处理提交。因为 View 绑定(bind)到 View 模型,所以操作方法将接受它作为输入参数:

[HttpPost]
public ActionResult Index(TestModel model)
{
     // Do what you need to do
     string date = model.FromDate;

     return View(model);
}

你的做法也是正确的。我刚刚向您展示了另一种方法。有一天,您可能会拥有一个包含许多输入值的巨大表单,那么我的方法将变得“更干净”。

关于asp.net-mvc - MVC HTTP Post 输入返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128094/

相关文章:

asp.net-mvc - asp.net mvc 操作过滤器中 http 重定向的无限循环

asp.net-mvc - MVC-Viewmodel 和 LINQ,将值插入表中,该值被另外两个表中的另外两个值标记

c# - IRouteConstraint MVC4 上的 HttpContextBase.Session 和 HttpContext.Current.Session 均为 null

c# - Asp.Net MVC 与 CaSTLe MonoRail

asp.net - 在 ASP.NET MVC View 中渲染 HTML 文件?

Android 浏览器无法下载 pdf 文件

asp.net-mvc - 自定义 View 引擎位置 View 模型解析问题

c# - 将 MVC 默认日期 (01/01/0001) 格式化为空

asp.net-mvc - Razor 对引用的 html 属性进行编码

asp.net-mvc - 当在客户端时进行流畅的验证