Html.DisplayFor 不将值发布到 ASP.NET MVC 3 中的控制器

作者:编程家 分类: 编程代码 时间:2025-11-23

一篇关于在 ASP.NET MVC 3 中使用 Html.DisplayFor 方法时不将值发布到控制器的文章。文章分为三个段落,并在中间段落中添加标题,并为标题添加标签。

段落一:介绍ASP.NET MVC 3和Html.DisplayFor方法

ASP.NET MVC 3是一种用于构建Web应用程序的开发框架,它通过模型-视图-控制器(MVC)的架构模式来分离应用程序的不同组件。在ASP.NET MVC 3中,开发人员可以使用Html.DisplayFor方法来在视图中显示模型的属性值。该方法接受一个Lambda表达式作为参数,用于指定要显示的属性。

段落二:问题描述和解决方法

不将值发布到控制器的问题

当使用Html.DisplayFor方法在视图中显示属性值时,这些值不会自动发布到控制器。这可能会导致在提交表单时丢失这些属性的值,从而导致数据不完整或不准确。

解决方法

为了解决这个问题,我们可以在表单中添加隐藏字段来存储这些属性的值。在视图中使用Html.HiddenFor方法,它会生成一个隐藏的input元素,并将属性值作为该元素的值。这样,当表单提交时,这些隐藏字段的值也会被发送到控制器。

以下是一个示例代码,演示如何在ASP.NET MVC 3中使用Html.DisplayFor方法和Html.HiddenFor方法来解决这个问题:

csharp

// 模型类

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

// 控制器

public class PersonController : Controller

{

public ActionResult Index()

{

Person person = new Person { Name = "John Doe", Age = 25 };

return View(person);

}

[HttpPost]

public ActionResult Edit(Person person)

{

// 处理表单提交的数据

// person.Name 和 person.Age 包含用户提交的值

// 其他属性的值将通过隐藏字段传递给控制器

return RedirectToAction("Index");

}

}

// 视图

@model Person

@using (Html.BeginForm("Edit", "Person", FormMethod.Post))

{

@Html.DisplayFor(model => model.Name)

@Html.HiddenFor(model => model.Name)

@Html.DisplayFor(model => model.Age)

@Html.HiddenFor(model => model.Age)

}

段落三:

在ASP.NET MVC 3中使用Html.DisplayFor方法可以方便地在视图中显示模型的属性值。然而,由于这些值不会自动发布到控制器,我们需要使用Html.HiddenFor方法来将这些值作为隐藏字段发送到控制器。通过这种方式,我们可以确保在表单提交时不会丢失这些属性的值,从而保证数据的完整性和准确性。