Vb.net 控制器接收到的空表单

Vb.net 控制器接收到的空表单,vb.net,asp.net-mvc-3,razor,Vb.net,Asp.net Mvc 3,Razor,我不知道我做错了什么,也不知道是什么导致了这个错误。当我将此表单提交给控制器时,控制器会收到两个空字段: 以下是视图中的表单: @Using Html.BeginForm("contactSearch", "search", FormMethod.Post) @Html.TextBox("SearchString") @Html.DropDownList("opportunite", "Choisissez une opportunité") @<input typ

我不知道我做错了什么,也不知道是什么导致了这个错误。当我将此表单提交给控制器时,控制器会收到两个空字段:

以下是视图中的表单:

@Using Html.BeginForm("contactSearch", "search", FormMethod.Post)
    @Html.TextBox("SearchString")
    @Html.DropDownList("opportunite", "Choisissez une opportunité")
    @<input type="submit" value="Submit!" />
End Using
如果这些字段中有一个是空的,我会得到这个错误:参数字典包含参数'opportunite'的空条目

所以,我要解决这个问题的唯一方法就是使用下面的代码。没有更好的办法解决这个问题吗

    Function contactSearch(ByVal search As String, ByVal opportunite As opportunite) As ViewResult
        Dim opport As Integer = 0
        Try
            opport = Val(Request("opportunite"))
        Catch ex As Exception
        End Try

        If opport = 0 Then

您错误地命名了操作参数。应该是这样的:

<HttpPost()>
Function contactSearch(ByVal searchString As String, ByVal opportunite As String) As ViewResult
    ...

函数contactSearch(ByVal searchString作为字符串,ByVal opportunite作为字符串)作为ViewResult
...

请注意,这两个参数的类型为String。在代码中,您对第二个参数使用了一些自定义的
Opportunity
类型,但这没有意义,因为DropDownList只发送选定的值。您不能期望它绑定到复杂类型。

是否获得“搜索”值

尝试传入表单集合以查看发布的内容

 public ActionResult CreateMarketingType(FormCollection form)
 {
      ...
 }

selectlist的Html代码提供如下smth:name。。。我应该写“机会主义者是整数”吗?我也理解为什么它以前能工作,我这样问控制器内部的值:Dim chaine As String=Request(“searchString”)是的,在这种情况下可以使用Integer。是的,这就是为什么它以前起作用的原因。因为您使用正确的名称从请求对象显式获取了值。如果您对动作参数参数遵守相同的命名约定,它也会起作用,因此您不再需要从请求对象手动获取它们。因此,我用另一个问题编辑了我的问题,因为我认为我为解决问题所做的工作是可以改进的解决方法是在动作方法签名中将
机会主义
参数设置为整数:
ByVal机会主义为整数
,然后直接使用控制器动作中的值。在这种情况下,使用可为空的整数:
可为空(指整数)
<HttpPost()>
Function contactSearch(ByVal searchString As String, ByVal opportunite As String) As ViewResult
    ...
 public ActionResult CreateMarketingType(FormCollection form)
 {
      ...
 }