天道酬勤,学无止境

ASP.NET MVC 2 and lists as Hidden values?

Hi,

I have a View class that contains a list, this list explains the available files that the user have uploaded (rendered with an html helper).

To maintain this data on submit I have added the following to the view :

<%: Html.HiddenFor(model => model.ModelView.Files)%>

I was hoping that the mode.ModelView.Files list would be returned to the action on submit but it is not?

Is it not possible to have a list as hiddenfield?

More information : The user submit a couple of files that is saved on the service, when saved thay are refered to as GUID and is this list that is sent back to the user to render the saved images. The user makes some changes in the form and hit submit again the image list will be empty when getting to the control action, why?

BestRegards

评论

Is it not possible to have a list as hiddenfield?

Of course that it is not possible. A hidden field takes only a single string value:

<input type="hidden" id="foo" name="foo" value="foo bar" />

So if you need a list you need multiple hidden fields, for each item of the list. And if those items are complex objects you need a hidden field for each property of each item of the list.

Or a much simpler solution is for this hidden field to represent some unique identifier:

<input type="hidden" id="filesId" name="filesId" value="123" />

and in your controller action you would use this unique identifier to refetch your collection from wherever you initially got it.

Yet another possibility is to persist your model into the Session (just mentioning the Session for the completeness of my answer sake, but it's not something that I would actually recommend using).

Before I start I'd just like to mention that this is an example of one of the proposed solutions that was marked as the answer. Darrin got it right, here's an example of an implementation of the suggested solution...

I had a similar problem where I needed to store a generic list of type int in a hiddenfield. I tried the standard apporach which would be:

<%: Html.HiddenFor(foo => foo.ListOfIntegers) %>

That would however cause and exception. So I tried Darrin's suggestion and replaced the code above with this:

<%
 foreach(int fooInt in Model.ListOfIntegers)
 { %>
<%: Html.Hidden("ListOfIntegers", fooInt) %>
<% } %>

This worked like a charm for me. Thanks Darrin.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • HTML 和 ASP.NET MVC 3 Razor 中隐藏输入和非常大的值的问题(Issue with hidden input and very large values in HTML and ASP.NET MVC 3 Razor)
    问题 由于隐藏输入值似乎有 1024 个字符的限制,那么对于超过此限制的值,每个人会怎么做? 是否可以合理地使用隐藏文件输入(<input type="file" value="some very long value"...)? 任何此类解决方案的字段长度限制是什么? <input id="someId" type="hidden" value="5538680,5538683,5538858,5539195,5540063,5540812,5540814,5541665,5541666,5541667, 5541668,5541669,5541670,5541671,5541672,5541673,5541674,5541675,5541676,5541677,5541678, 5541679,5541680,5541682,5541683,5541684,5541685,5541686,5541687,5541688,5541689,5541690, 5541691,5541692,5541693,5541694,5541695,5541696,5541697,5541698,5541728,5543254,5543501, 5543502,5543949,5543950,5544073,5544867,5545079,5545642,5545827,5545890
  • 如何在ASP.NET MVC中创建CheckBoxListFor扩展方法?(How to create a CheckBoxListFor extension method in ASP.NET MVC?)
    问题 我知道ASP.NET MVC Html帮助程序扩展方法中有ListBoxFor扩展方法,但我一直认为复选框列表比列表框更用户友好。 好的旧WebForms中有一个非常方便的CheckBoxList控件,但是显然这已经超出了想象。 问题是,为什么在ASP.NET MVC中无法创建复选框列表? 如何编写自己的扩展方法来创建复选框列表,并且其行为类似于ListBoxFor行为? 回答1 这是CheckBoxListFor的强类型HtmlHelper,用于将选定的项作为Viewdata模型中的数组进行处理。 我选择不包装Html.CheckBox或Html.CheckBoxFor方法,因为我不想在复选框列表中隐藏“ false”字段。 请随时对此进行改进,然后重新发布:-) //View <%: Html.CheckBoxListFor(model => model.FreightTypeIds, FreightTypeMultiSelectList) %> //Controller public ActionResult SomeAction(int[] FreightTypeIds) { //... return View(); } //Extension public static MvcHtmlString CheckBoxListFor<TModel, TProperty>
  • ASP.NET MVC ViewModel 和 DropDownList(ASP.NET MVC ViewModel and DropDownList)
    问题 我的 ViewModel 中有 2 个属性 class ViewModel1 { Dictonary<int, string> PossibleValues {get;set;}//key/value int SelectedKey {get;set} } 我想使用 Html.DropDownListFor 编辑它 我想让 MVC 自动将数据序列化到/从 ViewModel 中,这样我就可以执行以下操作 public ActionResult Edit(ViewModel1 model) ... 实现这一目标的最佳方法是什么? 回答1 正如womp所说,浏览器只会提交下拉列表的选定值。 这很容易被默认模型绑定器绑定,见下文。 如果您不是在客户端上编辑可能值列表,则无需将它们提交回来。 如果您需要重新填充列表,请使用与最初填充 Dictionary 的方法相同的方法在您的 post 操作中执行服务器端操作。 例如在您的页面中: <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel1>" %> <!-- some html here --> <%= Html.DropDownListFor(x => x.SelectedKey, new SelectList(Model.PossibleValues
  • ASP.Net MVC 3 - CheckBoxList - 需要一些建议(ASP.Net MVC 3 - CheckBoxList - Need some suggestions)
    问题 我对 ASP.Net MVC(和 razor)很陌生,我有几个问题。 1) 我创建了一个 HTML 扩展来创建一个复选框列表,如下所示: public static HtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<InputItemInfo> ItemInfo) { if (String.IsNullOrEmpty(name)) throw new ArgumentException("The argument must have a value", "name"); if (ItemInfo == null) throw new ArgumentNullException("ItemInfo"); if (ItemInfo.Count < 1) throw new ArgumentException("The list must contain at least one value", "ItemInfo"); StringBuilder sb = new StringBuilder(); ItemInfo.Insert(0, new InputItemInfo("*", "Select All", ItemInfo.All(i => i.IsChecked))); foreach
  • 在asp.net MVC中获取禁用下拉菜单的值(Get value of disabled drop down in asp.net mvc)
    问题 我有一个ASP.NET MVC应用程序。 我的页面(HTML SELECT)中有多个下拉列表,我必须禁用它们,因为用户继续一个一个地选择它们。 当用户将其发布回控制器时,作为函数(操作方法)参数,我会得到null。 我搜索发现HTML不会在表单数据中发送禁用字段的值。 用只读替换禁用的属性将不起作用,因为它将使下拉列表起作用。 随着用户的进行,我正在使用javascript动态生成下拉列表。 因此,没有一个下拉菜单,但可以根据用户需要进行选择。 有人可以告诉我如何获得这些价值吗? 回答1 一种可能性是使下拉列表为disabled="disabled"并包括一个具有相同名称和值的隐藏字段,该字段将允许将该值发送到服务器: @Html.DropDownListFor(x => x.FooId, Model.Foos, new { disabled = "disabled" }) @Html.HiddenFor(x => x.FooId) 如果您必须使用javascript动态禁用下拉菜单,则只需在禁用后将其当前选定的值分配给隐藏字段即可。 回答2 这是禁用控件的默认行为。 我建议您添加一个隐藏字段,并在此隐藏字段中设置DropDownList的值,然后使用它。 就像是: //just to create a interface for the user @Html
  • ASP.NET MVC Html.BeginForm 问题(ASP.NET MVC Html.BeginForm Problem)
    问题 我有一个部分观点: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.Product>" %> <div class="item"> <h3><%= Model.Name %></h3> <%= Model.Description %> <% using (Html.BeginForm("AddToCart", "Cart")) { %> <%= Html.Hidden("ProductID") %> <%= Html.Hidden("returnUrl", ViewContext.HttpContext.Request.Url.PathAndQuery) %> <input type="submit" value="+ Add to cart" /> <% } %> <h4><%= Model.Price.ToString("c")%></h4> </div> 这是被渲染的 html: <div class="item"> <h3>Kayak</h3> A boat for one person <form action="" method="post"> <input id="ProductID" name="ProductID" type=
  • ASP.NET MVC 2.0 - IList 复选框(ASP.NET MVC 2.0 - IList<T> CheckBoxes)
    问题 处理此问题的最佳方法是什么: class Option { int id; string name; } class QuoteItem { IList<Option> options; } class QuoteViewModel { IList<Option> allOptions; QuoteItem quoteItem; } 基本上,我在allOptions有所有可用的选项。 我想要一个复选框,当它被选中时,将另一个Option (即使它只是它的id )放入QuoteItem.options列表。 我将如何实现这一点? 最好是IList<bool>并在事后绑定它? 回答1 我建议你看一下 Phil Haack 的这篇关于模型绑定到列表的博客条目 对于您的情况,您可以使用简单的模型绑定到IEnumerable<int> options ,其中值将是您选择的选项的 id。 您的输入视图将如下所示: <form method="post" action="/QuoteItems/SetOptions"> <input type="hidden" name="options" value="1" /> <input type="hidden" name="options" value="4" /> <input type="hidden" name="options"
  • ASP.NET MVC 2:在每个 HTML 表格行中处理多个按钮的更好方法?(ASP.NET MVC 2: Better way to handle multiple buttons in each HTML table row?)
    问题 我有一个 HTML 表,其中每一行都有按钮,可以为每一行切换数据库中的状态位。 假设 Javascript 不是一种选择,那么处理这个问题的“最佳实践”方法是什么? 我目前正在通过将每一行包装成这样的形式来处理它: <table> <tr> <td> <form action="/FooArea/BarController/BazAction" id="frm0" name="frm0" method="post"> <span>Item 1</span> <input type="submit" value="Toggle1" name="submitButton" /> <input type="submit" value="Toggle2" name="submitButton" /> <input type="hidden" name="itemID" value="1" /> </form> </td> </tr> <tr> <td> <form action="/FooArea/BarController/BazAction" id="frm1" name="frm1" method="post"> <span>Item 2</span> <input type="submit" value="Toggle1" name="submitButton" />
  • 在ASP.NET MVC中绑定缺少元素的数组(Binding arrays with missing elements in asp.net mvc)
    问题 我正在尝试将元素的动态数组绑定到视图模型,而在html中可能缺少索引 例如与视图模型 class FooViewModel { public List<BarViewModel> Bars { get; set; } } class BarViewModel { public string Something { get; set; } } 和html <input type="text" name="Bars[1].Something" value="a" /> <input type="text" name="Bars[3].Something" value="b" /> <input type="text" name="Bars[6].Something" value="c" /> 此刻,bars将为空。 我如何才能使模型联编程序忽略任何缺失的元素? 即上述将绑定到: FooViewModel { Bars { BarViewModel { Something = "a" }, BarViewModel { Something = "b" }, BarViewModel { Something = "c" } } } 回答1 将.Index添加为您的第一个隐藏输入,以处理乱序元素,如本Phil Haacked博客文章中所述: <input type="text"
  • 是否可以将字典发布到 .NET MVC 操作?(Is POSTing a Dictionary to an .NET MVC action possible?)
    问题 我有一个包含一系列字段的表单,例如: <input type="text" name="User[123]" value="Alice" /> <input type="text" name="User[456]" value="Bob" /> ... 其中 User 数组的索引(123 和 456)是与值关联的 ID。 我正在尝试更新控制器中的这些值。 我的想法是将 ID 映射到名称的字典会起作用,但创建的操作如下: public void Save(Dictionary<string, string> user) { // ... } 导致用户参数为空。 那么,是否可以传递字典? 或者,是否有另一种方法来实现这一目标? 回答1 列表是可能的,我相信它也适用于字典。 阅读 Phil Haack 的 Model Binding to a List 以了解列表绑定的工作原理。 你应该能够做到这一点: <input type="hidden" name="User.Index" value="123" /> <input type="text" name="User[123]" value="Alice" /> <input type="hidden" name="User.Index" value="456" /> <input type="text" name="User
  • ASP.NET MVC 复选框组(ASP.NET MVC Checkbox Group)
    问题 我正在尝试针对 ASP.NET MVC 中缺少“复选框组”的问题制定解决方法。 实现这一点的典型方法是使用相同名称的复选框,每个复选框都有它所代表的值。 <input type="checkbox" name="n" value=1 /> <input type="checkbox" name="n" value=2 /> <input type="checkbox" name="n" value=3 /> 提交时,它将以逗号分隔所有值到请求项“n”..所以 Request["n"] == "1,2,3" 如果在提交时所有三个都被选中。 在 ASP.NET MVC 中,您可以将参数 n 作为数组来接受这篇文章。 public ActionResult ActionName( int[] n ) { ... } 以上所有工作正常。 我遇到的问题是,当验证失败时,复选框不会恢复到选中状态。 有什么建议。 问题代码:(我从默认的asp.net mvc项目开始) 控制器 public class HomeController : Controller { public ActionResult Index() { var t = getTestModel("First"); return View(t); } [AcceptVerbs(HttpVerbs.Post)] public
  • ASP.NET MVC 中多个浏览器选项卡中的唯一会话(Unique session in multiple browser tabs in ASP.NET MVC)
    问题 每当用户在 ASP.NET MVC 应用程序中打开新的浏览器选项卡或窗口时,我都想创建唯一的会话。 有可能在 ASP.NET/MVC 中吗? 我尝试遵循以下解决方案 asp.net - 会话 - 多个浏览器选项卡 - 不同的会话? 但是它在 ASP.NET MVC 中不起作用。 以上使用 ViewState 的解决方案,在 MVC 中我尝试使用 TempData 但它不起作用。 回答1 多年后我终于找到了这个问题的解决方案: 1.) 浏览器必须自己提供 ID,因为 http 是无状态的,cookie 不是单独为浏览器选项卡存储的,因此 asp.net 会话也不区分单个选项卡。 2.) 打开新标签页时,JS window.name 为''。 将 window.name 更改为某个值后,只要选项卡处于活动状态并且未被某些代码更改,它就不会再更改。 所以解决方案是:在 *.master 或每个 *.aspx 文件中实现一些简短的 JS 代码: if (typeof window.name != undefined) { if (window.name == '') { var d = new Date(); window.name = '_myWnd_' + d.getUTCHours() + d.getUTCMinutes() + d.getUTCSeconds() + d
  • ASP.NET MVC Format of Hidden DateTime
    I have a model with a DateTime property that in one place is placed in a hidden input field. @Html.HiddenFor(m => m.StartDate) Which generates the following HTML: <input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" > The problem is that the time is included in the value and my custom date validation expects a date in the format of ##/##/#### thus causing validation to fail. I can easily alter my custom date validation to make this situation work but I would rather make it so that the hidden field puts the value in the correct format. I have tried using the
  • asp.net mvc 模型绑定行为的问题(Problem with asp.net mvc modelBinding behavior)
    问题 我有一个复杂的表格 它允许用户创建一个包含许多活动的 IncomeDeclaration。 当活动的标记如下所示时,这可以正常工作: <tr> <td>SomeActivity <input type="hidden" value="13123" name="EconomicActivityIncomeDeclarations[0].EconomicActivityId" id="EconomicActivityIncomeDeclarations_0__EconomicActivityId"> </td> <td> <input type="text" name="EconomicActivityIncomeDeclarations[0].GrossIncome" id="EconomicActivityIncomeDeclarations_0__GrossIncome" /> </td> </tr> <tr> <td>SomeActivity <input type="hidden" value="654654" name="EconomicActivityIncomeDeclarations[1].EconomicActivityId" id="EconomicActivityIncomeDeclarations_1__EconomicActivityId"> </td
  • ASP.NET MVC - 如何在帖子中获取复选框值(ASP.NET MVC - How to get checkbox values on post)
    问题 大家好,这是一个新手 ASP.NET MVC 问题。 我有一个包含复选框列表和提交按钮的视图。 在将其提交给控制器方法时,但我无法弄清楚如何获取复选框的值。 另外,当我在 post 方法中时,我无法弄清楚如何获取我传递到视图中的模型数据,我尝试使用 Html.Hidden 但这似乎不起作用。 这是代码:http://pastebin.com/m2efe8a94(查看)http://pastebin.com/m39ebc6b9(控制器) 感谢收到的任何意见,贾斯汀 回答1 我注意到的第一件事是你的隐藏字段需要在你的表单中。 目前在您看来,它们位于 BeginForm 之上,因此它们不会包含在表单提交中。 要获取选定复选框的值,请将 IsOffered 参数添加到您的 OfferTrade Action 方法。 public ActionResult OfferTrade(FormCollection result, List<string> IsOffered) 该参数将包含所有选中的 IsOffered 框的 ItemId 列表。 HtmlHelper 的 CheckBox 的工作方式不同,我不喜欢它的工作方式,所以我不使用它。 如果您的 ItemId 字段是整数,则使IsOffered参数类型List<int>也应该起作用。 回答2 首先,您的 ItemId 和
  • 如何在 asp.net mvc 4 中获取 DropDownList SelectItem(How to get DropDownList SelectItem in asp.net mvc 4)
    问题 我正在使用 asp.net mvc 4 开发应用程序。这里我有一个下拉列表,它显示了一些金额列表。 我的模型命名搜索有一个名为最小十进制类型的变量,我在下拉列表中显示为 @Html.DropDownList("Minimum", new List<SelectListItem> { new SelectListItem { Text="Less Than 5000", Value="1"}, new SelectListItem { Text="5000", Value="2"}, new SelectListItem { Text="10,000", Value="3"}, new SelectListItem { Text="15,000", Value="4"}, new SelectListItem { Text="20,000", Value="5"}, new SelectListItem { Text="25,000", Value="6"}, new SelectListItem { Text="30,000", Value="7"}, new SelectListItem { Text="35,000", Value="8"}, new SelectListItem { Text="40,000", Value="9"}, new
  • ASP.NET MVC Html.BeginForm Problem
    I have a partial view: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DomainModel.Entities.Product>" %> <div class="item"> <h3><%= Model.Name %></h3> <%= Model.Description %> <% using (Html.BeginForm("AddToCart", "Cart")) { %> <%= Html.Hidden("ProductID") %> <%= Html.Hidden("returnUrl", ViewContext.HttpContext.Request.Url.PathAndQuery) %> <input type="submit" value="+ Add to cart" /> <% } %> <h4><%= Model.Price.ToString("c")%></h4> </div> And here is the html that gets rendered: <div class="item"> <h3>Kayak</h3> A boat for one person <form action="" method="post"> <input id
  • ASP.NET MVC 在一个表单上更新对象列表? (模型绑定到列表)(ASP.NET MVC Updating a list of objects on one form? (model binding to a list))
    问题 关于更新 asp.net mvc 中的项目列表的快速问题。 基本上我有一个返回对象集合的编辑操作方法(顺便说一下,它的表结构如下所示'testID,assetID,Result' - 一个链接表)。 我基本上希望这些项目在表单中一个接一个地显示并且能够编辑它们。 表单应该回传,modelbinder 会发挥它的魔力。 但是,这并不容易。 我已经在网上搜索过,似乎大多数关于这些东西的信息似乎有点过时了。 我遇到过这篇很久没有更新的帖子,而这似乎暗示你不应该绑定到已经存在的更新列表,并且在使用 EF 或 Linq 时会出现问题到 Sql(我就是)。 有没有一种简单的方法可以实现我想要的? 发布版本中列表模型绑定的状态是否发生了变化? 更新 - 更接近一点...... 这是我的编辑方法: public ActionResult EditSurveyResults(Guid id) { var results = surveyRepository.GetSurveyResults(id); return PartialView("EditSurveyResults", results); } 我的表格: <div id="editSurveyResults"> <h2> EditSurveryResults</h2> <%= Html.ValidationSummary("Edit
  • ASP.net MVC RC2 - Checkboxes with explicit values
    Is there a simple way to use the existing Html Helpers to generate a list of checkboxes with explicit values (as was possible in Beta)? Example in Beta (possibly with MVC Contrib): .CheckBox("Field", 6, new { value = 6}) would output: <input id="Field1" type="checkbox" value="6" name="Field" /> <input id="Field2" type="hidden" value="6" name="Field" /> yet in RC2 I get: <input id="Field1" type="checkbox" value="6" name="Field" /> <input type="hidden" value="false" name="Field" /> NB: I use a custom helper extension that generates unique HTML ids and sets the checked HTML attribute when
  • Issue with hidden input and very large values in HTML and ASP.NET MVC 3 Razor
    Since there appears to be a 1024 character limit for hidden input values, what does everyone do for values in excess of this limit? Can a hidden file input (<input type="file" value="some very long value"...) be reasonably used instead? What would the field length restrictions be of any such solution? <input id="someId" type="hidden" value="5538680,5538683,5538858,5539195,5540063,5540812,5540814,5541665,5541666,5541667, 5541668,5541669,5541670,5541671,5541672,5541673,5541674,5541675,5541676,5541677,5541678, 5541679,5541680,5541682,5541683,5541684,5541685,5541686,5541687,5541688,5541689,5541690