确定服务器端的表单输入类型

时间:2013-11-28 18:04:02

标签: asp.net-mvc forms input server-side model-binding

我有一个带有名为description的字段的表单,可以是文本框或选择列表,具体取决于以前表单字段的输入。这是如何工作的,如果前面的字段的值是常见的情况,我们将描述字段填充为具有存储在数据库中的值的选择列表。如果数据库中没有匹配的方案,则允许用户键入他们自己的描述。

如果输入类型是选择列表,则提交的值是整数(以字符串形式),可用于查询数据库以从数据库获取描述。否则,我们只使用通过文本框提交的文本值。

我的问题是:提交表单后,有没有办法确定描述字段的输入类型?

在我的控制器中,我希望能做到这样的事情:

if(InputType == "SelectList")
{
    Description = model.Description;
}
else if (InputType == "TextBox")
{
    Description = GetDescriptionFromDB(model.Description);
}

我已经考虑检查描述字段是否解析为整数,但如果用户在文本框中键入整数,那么这将无效。这是一个由不太可能输入垃圾值的受过训练的人使用的内部应用程序,但我仍然不喜欢使用依赖于用户输入内容的逻辑。我还考虑过使用Javascript和隐藏字段来传递沿输入类型,但我希望有一个更清洁的解决方案。

我目前正在使用模型绑定来获取我提交的表单值,但我对其他方法持开放态度。

修改:

人们建议采用其他方法,其中大多数已经考虑过了。我真正想知道的是,在发布表单或仅发布数据时,是否将有关输入类型的信息传递给服务器。

2 个答案:

答案 0 :(得分:0)

为什么不在表单中添加一个隐藏字段来跟踪描述字段的输入类型:

if(InputType == "SelectList")
{
    DescriptionInput = MyEnum.SelectList;
    Description = model.Description;
}
else if (InputType == "TextBox")
{
    DescriptionInput = MyEnum.TextBox;
    Description = GetDescriptionFromDB(model.Description);
}

答案 1 :(得分:0)

<select name="sel">
    <option class="default">Default</option>
</select>

表单中的每个Html表单元素都提交给服务器,它将它的价值提供给服务器。如果您选择了选择,那么它的值将偏离服务器。

你只需要解析它就可以了。

If there are no matching scenarios in the database the user is allowed to type in their own description

我的问题Queti的回答是正确的。您可以使用隐藏字段并传递现有匹配字段的ID。

请记住,这是不安全的,所以更好的选择是你可以在服务器上检查它们是否存在于服务器中。通过这种方式,您的代码可以确定用户输入的内容。