【问题标题】:Set input column value in code in MVC在 MVC 中的代码中设置输入列值
【发布时间】:2012-07-30 09:39:11
【问题描述】:

我今天在 ASP.NET 中创建了我的第一个 MVC 应用程序。我有一个日期时间列“CreatedAt”,它应该由当前日期填充,而在输入表单中不可见。但是生成的代码有这样的代码:

 <div class="editor-field">
     @Html.EditorFor(model => model.CreatedAt)
     @Html.ValidationMessageFor(model => model.CreatedAt)
 </div>

它以输入形式显示一个文本框。我不想显示它,而是应该在后面的代码中设置它。我该怎么做?

【问题讨论】:

  • 我可能会误解你,但是为什么不从你的视图中删除上面的代码并在方法中设置 CreatedAt 呢?
  • 在您的控制器上,您有一个方法来处理呈现视图的获取请求。您还应该在控制器上有一个方法,通常称为相同名称但具有 httppost 属性。这会在提交页面时处理页面,因此请在此方法中设置值。

标签: asp.net-mvc razor input


【解决方案1】:

ASP.NET MVC 没有“代码隐藏”的概念。很简单,您从 View 发送数据,然后在 Controller 中进行处理。

因此,如果这是一个 POST 操作,那么我们可以将数据发送回控制器,甚至更好的是,我们可以将该数据“隐藏”在文本框视图中。

在您看来,您应该将其替换为以下行:

 @Html.HiddenFor(m => m.CreatedAt, DateTime.Now);

然后当模型被 POST 到控制器时,CreatedAt 属性将填写 DateTime.Now。

当你发布一些东西时,它必须去一个动作方法:

公共类 MyController : 控制器 { //其他的东西

[HttpPost]
public ActionResult Edit(Product product)
{
    product.CreatedAt // should equal the DateTime.Now set when you created the View
}

}

或者你可以在控制器中设置它POSTs:

公共类 MyController : 控制器 { //其他的东西

[HttpPost]
public ActionResult Edit(Product product)
{
    product.CreatedAt = DateTime.Now;
}

}

在这种情况下,您可能会遇到Html.Hidden 的问题,如果这样做,请确保use the work around in place

【讨论】:

  • @Hotcoder 它发布的动作是什么样的?你的路线是什么样的?
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多