加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在ASP.NET MVC 3中发布动态表单

发布时间:2020-12-15 04:02:48 所属栏目:百科 来源:网络整理
导读:在我正在处理的其中一种表单上,如果用户根据所选值选择DropDownList“Type”,我将动态显示一组其他DropDownLists. 例如,类型:汽车,公寓 选择“Car”,将动态添加两个新的DropDownLists“Price” “模型”. 选择“Building”,将动态添加两个新的DropDownLists
在我正在处理的其中一种表单上,如果用户根据所选值选择DropDownList“Type”,我将动态显示一组其他DropDownLists.

例如,类型:汽车,公寓
选择“Car”,将动态添加两个新的DropDownLists“Price”& “模型”.
选择“Building”,将动态添加两个新的DropDownLists“Area”& “地板”

我的问题是如何处理发布到服务器的数据?我通常会收到表单的字段,并自动获得“模型绑定”.但是根据用户的选择在页面上添加的那些动态字段呢?我将如何在Action中检索它们?

谢谢

解决方法

啊误解了这一点.

如果你知道可以添加什么下拉列表,我总是会在你的模型上有一个值.如果没有收到任何内容,MVC会将它们设置为默认值.

编辑:您仍然可以使用控制器以更原始的方式访问表单集合

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%安全).这也可能会带来一些安全问题,但是有一些情况你可以使用它,我会假设你有其中一个.

如果情况并非如此,请不要忘记,因为模型具有属性,所以根本不需要回发.

你可以这样做:

public class MyModel
{
    [Required]
    public string FirstName { get; set; }

    public string PossibleDropdown1 { get; set; }

    public string PossibleDropdown2 { get; set; }
}

控制器最好填充模型,但是如果你没有从表单中传回一些字段,它们将只是null并且操作仍然有效.

我还使用父模型的子对象和所有可空的对象实现了更复杂的场景.这需要在模拟视图中围绕ajax调用EditorTemplates进行一些奇特的工作,以确保前缀适合MVC解析,但我不会在这里讨论.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读