啊误会了这个。
如果您知道可能会添加下拉菜单,我会始终只对您的模型有一个值。如果没有收到任何内容,MVC会将它们设置为默认值。
编辑:您仍然可以从withing控制器使用
Request.Form.Keys
Request.QueryString.Keys
Request["ExpectedDropdownName"]
当然这些都将被张贴表单的所有值访问形式收集在一个更原始的方式,因此您需要一种方法来识别一个你的下拉菜单就像一个前缀或其他东西。例如
foreach (var key in Request.Form.AllKeys.Where(k => k.StartsWith("dynamic-dropdown-"))
{
var selectedValue = Request[key];
}
我还是真的不明白你打算如何处理动态下拉菜单,如果你不知道自己会什么,这可能会导致一些问题,并会验证完全动态的和客户端(不是100%安全)。这也可能会带来一些安全问题,但是有些情况下您可能会使用这一点,我会假设您拥有其中一个。
如果情况并非如此,请不要忘记,仅仅因为Model有一个属性,根本不需要回发。
你可以这样做:
public class MyModel
{
[Required]
public string FirstName { get; set; }
public string PossibleDropdown1 { get; set; }
public string PossibleDropdown2 { get; set; }
}
控制器将做到最好来填充模型,但如果你没有通过某些字段从形式回来了,他们只是为空,行动仍然会工作。
我也使用父模型的子对象并且所有可为空来实现更复杂的场景。这需要在mock Views中对EditorTemplates的ajax调用进行一些奇特的工作,以确保MVC解析前缀是正确的,但我不会在这里进行讨论。
你试过用ajax – 2012-03-09 00:41:09
@COLDTOLD这是一个服务器端的问题,Ajax是不是会造成任何影响 – 2012-03-09 00:54:44
@Marek Karbarz您可以通过使用Ajax – 2012-03-09 05:37:30