在asp.net mvc2(c#)中处理以下情况的最佳方法是什么:
我有一个表单,用户可以在其中添加更多字段...例如,我向用户询问他们拥有的个人计算设备的详细信息。为了简单起见,我想说我要求品牌和类型(桌面/笔记本电脑/平板电脑/其他的下拉列表),他们可以提供无限的设备。我将从一对文本框开始:
<label>Type</label>
<select><option>Desktop</option><option>Laptop</option><option>Tablet</option><option>Other</option></select>
<label>Brand</label>
<input type="text" />
<input type="button" value="Add more device" />
然后当用户点击“添加更多设备”按钮时,我将显示另一对品牌和类型文本框......依此类推。
我的问题是我应该如何使用HTML帮助器,如何构建viewModel等。
我来自PHP背景,我曾经在PHP中使用以下内容:
<input type="text" name="brand[]" />
后端会给我一系列品牌......不确定这是否可以在asp.net环境中使用。我很感激任何意见。谢谢。
[我添加了以下几行以使我的问题更清晰] 我想我的问题并不是很清楚。
假设我有以下viewmodel:
public class UserRegisterViewModel
{
public string DeviceBrand { get; set; }
public string DeviceType { get; set; }
}
当我有两个文本框时,这很有效:
<%: Html.TextBoxFor(m => m.DeviceBrand) %>
<%: Html.TextBoxFor(m => m.DeviceType) %>
但我面临的情况是我需要允许用户添加更多设备品牌和文本框...用户应该能够添加他需要的数量。
我应该如何编写视图模型和视图?
我希望这会让我的问题更加清晰。我在隐藏和显示文本框方面没有问题(是的,我使用JQuery)。
谢谢。
答案 0 :(得分:1)
在C#中,C ++数组就像固定大小一样。但是,您可以使用List&lt;&gt;做类似的事情。它允许您使用添加功能动态添加数据。像这样:
List<object> name = new List<object>();
name.Add(an_object);
所以说一个字符串列表:
List<string> myStrings == new List<string>();
myStrings.Add("Blah");
它们就像数组一样被访问 - Console.WriteLine(myStrings [0])输出Blah
答案 1 :(得分:0)
根据情况,有以下解决方案:
如果您已经知道将显示哪些文本框,请将它们添加到您的页面中并将其可见性设置为false(如CSS中的“display:none”)并稍后再显示它们。
如果您事先不知道将显示哪些文本框,您仍然可以将它们附加到HTML DOm中(将其添加到您页面的控件集合中)
要向他们展示有两个apporaches:
在第一种情况下,使用也可以从服务器端执行,这将导致整页回发。
在第二个Apporach中您还可以使用jQuery或Javascript在表单中添加新的文本框
使用最适合您的方法
答案 2 :(得分:0)
您可以做的是将UserRegister作为Model并拥有UserRegisterViewModel 列表属性
然后在您的视图中,您可以使用循环来呈现您的viewmodel列表属性
在例如C#
中的foreach中答案 3 :(得分:0)
假设您将ViewModel定义为:
public class BrandListViewModel
{
public List<UserRegisterViewModel> Brands {get;set;}
}
您的视图需要输出HTML格式:
<select name="Brands[0].DeviceType">...</select>
<input type="text" name="Brands[0].DeviceBrand"/>
和
<select name="Brands[1].DeviceType">...</select>
<input type="text" name="Brands[1].DeviceBrand"/>
您需要保持索引的运行,以便模型绑定器可以按正确的顺序构建列表。现在,您可以使用jQuery来执行此操作,并且当您将项目附加到页面时,只需获取计数并按1递增。如果要删除单个字段,则需要重命名所有字段。
您还可以使用纯jQuery方法,解析元素,将项目推送到数组并将数组发送到服务器。