【问题标题】:Checkboxes in ASP.net MVC (c#)ASP.net MVC (c#) 中的复选框
【发布时间】:2010-11-18 23:21:37
【问题描述】:

我正在创建一个复选框列表来处理一些首选项,如下所示...

        <ul>
            <%foreach (var item in ViewData["preferences"] as IEnumerable<MvcA.webservice.SearchablePreference>)
              {
                  var feature = new StringBuilder();
                  feature.Append("<li>");
                  feature.Append("<label><input id=\"" + item.ElementId + "\" name=\"fpreferences\" type=\"checkbox\" />" + item.ElementDesc + "</label>");
                  feature.Append("</li>");
                  Response.Write(feature);
              }
            %>
        </ul>

数据交给 SearchablePreference[] 的 viewdata,列表显示正常。

问题是;如果页面必须返回自身(即验证失败),我将如何重新填充选定的框。

在 webforms 中,它由 viewstate 自动处理;对于其他输入元素,我只是通过 ViewData 将发送的数据传递回页面。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc .net-3.5


    【解决方案1】:

    请改用Html.Checkbox

    【讨论】:

    【解决方案2】:

    您必须读取所有值,然后将它们添加到您返回的视图的 ViewData 中,将它们写入视图显示中的复选框(最好使用 Html.Checkbox)。据我所知,Html.Checkbox 不会自动为您管理视图状态。

    假设我有一个标准的 CRUD 对象,我经常在编辑视图中有这样的东西。 (我使用相同的视图进行编辑和新建)

    <input (other input attribute here) value="<%=(myObj == null ? "" : myObj.AppropriateProperty)%>" />
    

    【讨论】:

    • 如果我错了,请纠正我,但是MVC不使用ViewState,并且在MVC中不应该使用ViewState。如果您需要 ViewState,请使用 Web 表单。
    • 原来的事情是说在Webforms中你不需要这样做,因为你有Viewstate;我不打算为一个愚蠢的功能重写整个应用程序。因此寻找替代方案。塔
    • @Russell。我认为您将 ViewModel 与 ViewState 混淆了。 HtmlHelpers 在重新填充时首先查看 ViewData.ModelState["controlName"].Value.RawValue 然后查看 ViewData.Eval["controlName"]。您可以在我强烈推荐的 Pro ASP.NET MVC Framework 一书中阅读所有相关内容。
    • 好吧,其他帖子似乎表明 Html.Checkbox 将为您缓存视图状态。如果是这样的话,那就太好了!我只是从来没有为我工作过。我可能在我的两个项目中做了一些奇怪的事情,导致它无法正常工作。
    • @RichardOD - 查看一些 MVC 文档,很明显它不使用 ViewState。我的问题是数据在中间的位置。如果我有一个名为“joe”的输入,MVC 会自动将该值放入 ViewData[“joe”] 中,还是在处理过程中我必须在控制器中执行它 - ViewData [“joe”] = formCollection [ “乔”];
    【解决方案3】:

    我同意 RichardOD,使用 Html.Checkbox

    但如果您坚持手动操作,方法如下

    使用一个对象来保存数据(无论是否选择了某些东西)并将其提供给视图,在填充复选框时,检查是否设置了相关值,如果设置了 html "checked=\"checked\" " 在复选框上

    第一次渲染时,对象将只有虚假数据,因此不会选择任何内容。

    【讨论】:

      【解决方案4】:

      视图中有太多代码。这应该在控制器中完成。视图应该是:

          <ul>
              <%foreach (var item in ViewData["preferences"] as IEnumerable<MvcA.webservice.SearchablePreference>)
                {
                    <li>
                        <%=Html.Checkbox(........) %>
                    </li>
                }
              %>
          </ul>
      

      【讨论】:

        猜你喜欢
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 2011-08-03
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 2013-08-05
        相关资源
        最近更新 更多