gpt4 book ai didi

asp.net-mvc - 一个 ASP.NET MVC 陷阱?沮丧的

转载 作者:行者123 更新时间:2023-12-05 00:01:57 26 4
gpt4 key购买 nike

我对 ASP.NET MVC html 帮助程序(例如 TextBoxFor()、HiddenFor() 等)有疑问。如果我有一个模型(例如 Employee),其字符串成员为 Name 并执行 Html.TextBoxFor(p => p.Name),则为我认为 ASP.NET MVC 是错误的将始终使用 员工姓名中的值?因为它没有。 ASP.NET 将覆盖该绑定(bind)并使用 POST 中的内容。

例如,假设我有以下代码:

型号

namespace MvcApplication2.Models
{
public class Company
{
public string Name { set; get; }
public List<Employee> Employees { set; get; }
}

public class Employee
{
public string Name { set; get; }
}
}

Controller
namespace MvcApplication2.Controllers
{
public class HomeController : Controller
{
public ActionResult Company(string Name)
{
return View(new Company {
Name = Name,
Employees = new List<Employee> {
new Employee { Name = "Ralph" },
new Employee { Name = "Joe" } }
});
}
}
}

首页/Company.cshtml
@using MvcApplication2.Models;
@model Company


<h2>Company's Name: @Model.Name</h2>
@foreach (Employee emp in Model.Employees)
{

Html.RenderPartial("Employee", emp);
}

首页/Employee.cshtml
@model MvcApplication2.Models.Employee
<b>Employee's Name: </b> @Html.TextBoxFor(p => p.Name);

当我点击相对网址“Home/Company?Name=MSFT”时,我希望 Employee.cshtml 在文本框中呈现“Ralph”和“Joe”,但它会为两个文本框呈现 MSFT。我该怎么做才能让“Ralph”和“Joe”出现在文本框中?我是否必须确保我的 POST 和 GET 变量在我的 View 模型的所有层中都不会发生冲突(在本例中是 Company 和 Employee 类)?这似乎很愚蠢。必须有一个简单的解决方法,对吧?

这是结果的屏幕截图:
enter image description here

最佳答案

HtmlHelper 方法和 ModelState

使用 MVC HtmlHelper 方法需要理解的重要一点:
他们总是看ModelState第一,value二、ViewData第三。
ModelState很重要,因为它包含用户提交的值。如果页面验证失败,ModelState用于存储以前的值和错误消息。

如果你想发布一个表单,并且如果一切都有效,你想再次显示表单,你要么必须:

  • 从 POST 重定向到 GET(遵循 PRG 模式)
  • 清除模型状态:ModelState.Clear();

  • EditorFor 与 RenderPartial

    另一个重要的事情是 EditorFor/DisplayFor 之间的区别。对比 RenderPartial .

    当您使用 EditorFor/DisplayFor对于一个项目(例如 .EditorFor(m => m.Person) ),它将一种“命名空间”添加到 "Person" 的模板中这样子控件将具有唯一的名称。例如,在模板中, .TextBoxFor(p => p.Name)将呈现类似 <input name="Person.Name" ... 的内容.

    但是,当您使用 RenderPartial ,没有创建这样的命名空间。因此, .TextBoxFor(p => p.Name)将呈现 <input name="Name" ... ,如果您有多个编辑器,这将不是唯一的。

    关于asp.net-mvc - 一个 ASP.NET MVC 陷阱?沮丧的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610603/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com