MVC没有将模型数据从视图传递到控制器

时间:2016-06-02 19:38:59

标签: asp.net-mvc vb.net visual-studio-2013

这是一个非常基本的模型/视图/控制器,并且模型不会从带有任何数据的视图进入控制器。这可能是我想念的基本内容!

两种模式:

Namespace Models 
    Public Class Search
        Public Property Search() As String = String.Empty
        Public Property Member() As Member = Nothing
    End Class
End Namespace

Namespace Models 
    Public Class Member
        Public Property ContactRefID() As String = String.Empty
    End Class
End Namespace

控制器:

Imports Test.Models
Imports Test.Services

Namespace Test
    Public Class HomeController
        Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        Dim search As New Search
        Return View("Index", search)
    End Function

    <HttpPost()>
    Function Index(ByVal search As Search) As ActionResult
        Dim member As New Member
        Dim homeRepository As New HomeRepository
        member = homeRepository.GetMemberData(search)
        search.Member = member
        Return View("Index", search)
    End Function

    End Class
End Namespace

查看:

@ModelType Test.Models.Search
@Code
    ViewData("Title") = "Search Page"
End Code
@Using Html.BeginForm("Index", "Home", FormMethod.Post)    
    @<div class="row">
        <div class="col-md-4">
            <label>Search Member/Account Number:</label>
            @Html.TextBoxFor(Function(model) model.Search)
            <br /><br />
            <button id="btnSubmit" type="submit" class="btn btn-primary btn-large clrButton">
                Search
            </button>
        </div>
    </div>
    <div class="row">
        @*...To be filled with Search.Member data*@
    </div>
End Using

当我在文本框中输入成员/帐号以启动搜索时,搜索值不会被发送到控制器中的第二个索引功能。它肯定会被调用,因为我内部的断点被击中,但“ByVal搜索为搜索”又回来了。

我在2013年知道模型不需要get:set项目,但我尝试添加它们但仍然无效。

我还在顶部索引中为search.Search设置了一个值,文本框中填充了该值。但是当我单击“搜索”按钮时,它也不会被发送到第二个索引函数。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果类型具有相同的名称,则

DefaultModelBinder无法绑定/识别属性 - 在本例中为Search。只需将属性更改为其他内容,您就可以开始......

一般来说,考虑一下你要创建的对象并避免这种重言式是一种很好的做法。如果听起来合理,您可以更轻松地维护这些对象。例如。在这种情况下,您为您的班级使用名称Search。将寻求的价值命名为Search也没有任何意义。只需按名称命名即可 - SoughtValue