ASP.NET MVC 遇到问题?沮丧的

2023-12-27

我对 ASP.NET MVC html 帮助程序(如 TextBoxFor()、HiddenFor() 等)有问题。如果我有一个模型(如带有字符串成员 Name 的 Employee )并执行 Html.TextBoxFor(p => p.Name),则为我认为 ASP.NET MVC 是错误的会一直用员工姓名中的价值?因为事实并非如此。 ASP.NET 将覆盖该绑定并使用 POST 中的内容。

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

Model

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; }
    }
}

控制器

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);

当我点击相对 URL“Home/Company?Name=MSFT”时,我希望 Employee.cshtml 在文本框中呈现“Ralph”和“Joe”,但它却为两个文本框呈现 MSFT。我需要做什么才能让“Ralph”和“Joe”出现在文本框中?我是否必须确保我的 POST 和 GET 变量在视图模型的所有层(在本例中为 Company 和 Employee 类)中不会发生冲突?这看起来很愚蠢。一定有一个简单的解决方法,对吗?

Here's a screenshot of the result: enter image description here


HtmlHelper 方法和 ModelState

使用 MVC HtmlHelper 方法需要了解的重要一点是:
他们总是看着ModelState first, value第二,ViewData third.

The ModelState很重要,因为它包含用户提交的值。如果页面验证失败,ModelState用于存储以前的值和错误消息。

如果您想发布表单,并且一切都有效,并且您想再次显示该表单,则必须:

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

EditorFor 与 RenderPartial

另一个需要提到的重要事情是之间的区别EditorFor/DisplayFor vs RenderPartial.

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

但是,当您使用RenderPartial,没有创建这样的命名空间。所以,.TextBoxFor(p => p.Name)将渲染<input name="Name" ...,如果您有多个编辑器,则该值不会是唯一的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 遇到问题?沮丧的 的相关文章

  • 使用restsharp序列化对象并将其传递给WebApi而不是序列化列表

    我有一个看起来像的视图模型 public class StoreItemViewModel public Guid ItemId get set public List
  • 无法在 VB MVC 应用程序中创建 HtmlHelper 方法

    我无法弄清楚以下代码中缺少什么 我有一个应该添加 虚拟 辅助扩展的方法 Imports System Runtime CompilerServices Namespace HtmlHelpers Public Module HelpExte
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request
  • 可排序的 Telerik 网格 + NHibernate、IQueryable 和 ASP.NET MVC

    我正在尝试让 Telerik 网格工作 分页工作正常 我的视图代码如下所示 Html Telerik Grid Model Name Grid Columns columns gt columns Bound o gt o ItemName
  • 将 {sitename} 参数传递给 MVC 控制器操作

    我怎样才能检索站点范围的 URL 参数在路线中而不用参数使每个控制器操作混乱 我的问题类似于这个问题 https stackoverflow com questions 235118 asp net mvc route to usernam
  • 从 Orchard 内的主题渲染图像

    我刚刚选择 Orchard 来构建我的博客 作为创建这个新博客的努力的一部分 我正在创建一个自定义主题 这个自定义主题同时具有 CSS 和图像 我的问题 我的问题基本上可以归结为 如何渲染属于主题一部分的图像 到目前为止我已经尝试过的 我尝
  • .NET-MVC - 通过 SSL 重写 URL + 某些 URL?

    我有一个运行 IIS 6 NET MVC 和单个域名的网络服务器 该网站使用 URL 重写来生成如下 URL 域名 com controller action 我愿意强行一 1 个控制器 to use SSL 其他的应该无需 SSL 即可工
  • 使用 LINQ 和 ASP.NET MVC 更新多个表

    只是简单地说一下 我只是想寻求一些澄清 我希望通过一个 创建 操作来更新多个表 在尝试之前 我只是想知道是否可以简单地执行以下操作 db hdCalls InsertOnSubmit a db hdCustomers InsertOnSub
  • 如何在使用 ajax 和 JQuery 时加密发布数据?

    服务器端我们可以对用户进行身份验证 但我希望 ajax 或 JQuery 发送数据时数据安全 就像在客户端一样 某人只能看到加密格式的任何调用的参数 那么我该怎么做呢 我在这个网站上看到过这个场景 EDIT 当数据来自服务器时 我们可以忽略
  • MVC 操作过滤器和多线程

    我目前遇到了操作过滤器的线程问题 在我的应用程序上 我使用 ActionFilter 来执行每个操作的跟踪 此跟踪将提供统计信息 例如调用的持续时间 并记录参数被派往行动 实际的跟踪实现 由其他团队完成 使用 IDisposable 对象
  • 如何在Web网格的列中编写IF条件

    我在 WEB GRID 列中创建 if 条件时遇到错误 所以 请帮助改进我的代码并解决我的问题 grid Column Status format item gt
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 禁用视图中所需的验证特定字段 ASP.NET MVC 4

    如果有人能给我一些提示 我将不胜感激 我搜索了一段时间 我什至找到了一个帖子 我认为它可以解决我的问题 但它没有 在某些情况下禁用必需的验证属性 https stackoverflow com questions 5367287 disab
  • 运行更新数据库时出错

    我在运行时遇到以下错误Update Database Verbose 使用启动项目 WebApplication 使用 NuGet 项目 Web应用程序 指定 Verbose 标志来查看 SQL 应用于目标数据库的语句 目标数据库是 星冰乐
  • 检测 ASP.NET MVC 上的会话过期

    我构建了一个购物车 它使用会话状态在用户浏览商店时保留购物车数据 我遇到一个问题 如果我在购物车的第 1 步上长时间打开浏览器窗口 然后按 转到第 2 步 我的操作会引发错误 因为第 2 步操作假定会话尚未过期并且ShopCart 对象处于
  • 尝试使用 VS 2012 打开我的 asp.net 4.5 MVC Web 应用程序时出错。Asp.net 尚未在服务器上注册

    我有一个Windows Server 2012 R2 Visual Studio 专业版 2012 现在我用来开发 ASP NET 4 5 MVC 4 Web 应用程序 没有任何问题 但现在当我尝试打开该项目时 我会收到此错误 如果我单击
  • 我无法使 ValidateInput(False) 工作 - 从客户端检测到潜在危险的 Request.Form 值

    我尝试了很多组合 但无法在此代码块上关闭验证 ValidateInput false public ActionResult aSavePageCopy aLoggedIn int id Convert ToInt32 Request Fo
  • 如何将 Razor 视图转换为字符串?

    我想使用我的 Razor 视图作为某种发送电子邮件的模板 所以我想将我的模板 保存 在视图中 将其作为字符串读入控制器 进行一些必要的替换 然后发送它 我有有效的解决方案 我的模板作为 HTML 页面托管在某处 但我想将其放入我的应用程序中
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn

随机推荐