2009-08-12 65 views
0

我创建一个复选框列表来处理一些喜好如下...复选框在ASP.net MVC(C#)

 <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 []的可视数据和列表显示精细。

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

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

谢谢

回答

2

改为使用Html.Checkbox

+0

好点;不得不承认我很虚弱 – 2009-08-12 14:42:05

+0

找到这个有用的:Gotcha 2 - http://www.mikesdotnetting.com/Article/109/ASP.NET-MVC-Entity-Framework-One-to-Many-and-Many-to -Many-INSERTS – 2009-08-12 14:59:47

0

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

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

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

纠正我,如果我错了,但MVC不使用ViewState,ViewState不应该在MVC中使用。如果您需要ViewState,请使用Web窗体。 – Martin 2009-08-12 14:14:49

+0

原来的事情说,在Webforms你不需要这样做,因为你有Viewstate;我没有打算重写一个完整的应用程序来完成一个功能。因此寻找替代品。 Ta – 2009-08-12 14:41:05

+1

@Russell。我认为你使ViewModel与ViewState混淆。当重新填充时,HtmlHelpers首先查看ViewData.ModelState [“controlName”] .value.RawValue,然后查看数据.Eval [“controlName”]。你可以在我强烈推荐的Pro ASP.NET MVC框架书中阅读所有关于此的内容。 – RichardOD 2009-08-12 15:32:04

0

我RichardOD同意,使用Html.Checkbox

,但如果你坚持做手工,here's如何

使用一个对象来保存数据(不管是否选择了某些内容),并在填充复选框时检查是否设置了相关的值,如果是这样,则在页面上设置html“checked = \”选中\“”复选框

冷杉当你渲染它时,对象将只有虚假的数据,所以没有选择。

0

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

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