c# - MVC Razor 隐藏输入和传递值

标签 c# html asp.net-mvc asp.net-mvc-3 model-view-controller

我很确定我在这里做错了什么。在过去的 2 个月里,我们一直在使用 MVC 和 Razor 开发 Web 应用程序,但我们从未想过使用表单元素。现在已经对母版页和子页做了很多工作,这意味着要重构我们的大部分代码以使用表单元素,这将导致页面上出现多个表单元素。

除此之外,在 Asp.Net 中,如果我想访问后面的 C# 代码中的任何控件,我可以只给它一个 ID="SomeID"和一个 RUNAT="SERVER"。然后在我后面的代码中我可以设置它的值和属性。

当我在 Razor 中执行此操作时,我们使用如下行:

 <input id="hiddenPostBack" runat="server" type="hidden" />

为什么我不能在 Controller 中访问它?如果这是第一次加载页面,我想检测回发并将值设置为 false,如果不是,则将值设置为 true。然后基于此,我将在服务器端或客户端读取它并执行一些操作。

我真正的问题是,如果我没有表单元素,我该如何在服务器端和客户端“做某事”。我的印象是,如果我想将值从客户端传递到服务器并返回,最简单的方法是使用隐藏输入。但我只是不知道如何使用 MVC3 和 Razor 来完成此任务。

预先感谢您的帮助。

最佳答案

从 WebForms 到 MVC 的转变需要逻辑和大脑过程的彻底改变。您不再与服务器端和客户端的“表单”交互(事实上,即使使用 WebForms,您也没有与客户端交互)。您可能只是在那里混淆了一些想法,因为对于 WebForms 和 RUNAT="SERVER",您只是在与网页的构建进行交互。

MVC 有点类似,因为你在构建模型时有服务器端代码(你需要构建用户将看到的数据),但是一旦你构建了 HTML,你需要理解服务器之间的链接并且用户不再存在。他们有一个 HTML 页面,仅此而已。

因此您构建的 HTML 是只读的。您将模型传递给 Razor 页面,该页面将构建适合该模型的 HTML。

如果你想要一个隐藏的元素,它根据这是否是第一个 View 来设置 true 或 false,你需要在你的模型中使用一个 bool 值,如果它是对后续操作的响应,则在 Action 中将其设置为 True .这可以通过根据请求是 [HttpGet] 还是 [HttpPost] 采取不同的操作来完成(如果这适合于您设置表单的方式:首次访问使用 GET 请求,如果提交表单则使用 POST 请求)。

或者,模型可以在创建时设置为 True(这将是您第一次访问该页面),但是之后您检查值是 True 还是 False(因为 bool 默认值实例化时为 False)。然后使用:

@Html.HiddenFor(x => x.HiddenPostBack)

在您的表单中,这将隐藏一个 True。当表单回发到您的服务器时,模型现在将该值设置为 True。

很难提供比这更多的建议,因为您的问题并未具体说明为什么您要这样做。阅读一本关于从 WebForms 迁移到 MVC 的好书可能很重要,例如 Steve Sanderson 的 Pro ASP.NET MVC。

关于c# - MVC Razor 隐藏输入和传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325616/

相关文章:

c# - Uri.ToString() 和 Uri.AbsoluteUri 有什么区别?

asp.net-mvc - 如何将数据集返回到 View

网络 MVC : SSO + AD group?

javascript - 为什么这个 js 幻灯片在一个安装上有效,而在另一个安装上无效?

html - 将我的联系表移到背景图片上

javascript - 下载文件后如何关闭引导模式弹出窗口

c# - 两害相权取其轻? ViewModel 中的标记还是 View 中的逻辑?

C# SMO - 将表数据脚本化到文件。 throw 错误

c# - 从 C# 中的现有静态对象向对象动态添加属性

c# - 所有内置 .Net 属性