我有一个ViewModel,它的属性定义为Division类型的IList。 Division对象如下:
public class DivisionViewModel :
{
public int Id { get; set; }
public int DivisionId { get; set; }
public string Name { get; set; }
}
过去,我刚刚在视图中创建了以下内容:
<div class="divisions">
@for (int i = 0; i < Model.Divisions.Count(); i++)
{
@Html.Hidden(Model.Divisions[i].DivisionId.ToString(), new { @name = "Divisions[" + i + "].DivisionId", @id = "Divisions_" + i + "__.DivisionId" })
@Html.Hidden(Model.Divisions[i].Id.ToString(), new { @name = "Divisions[" + i + "].Id", @id = "Divisions_" + i + "__.Id" })
@Html.Hidden(Model.Divisions[i].Name, new { @name = "Divisions[" + i + "].Name", @id = "Divisions_" + i + "__.Name" })
}
</div>
当我提交页面时,在检查返回的ViewModel时,我发现已填充了DivisionId,但Id和Name属性都没有。
我已注释掉设置DivisionId的行,但仍然返回但没有Id和Name属性
我错过了什么?
答案 0 :(得分:5)
模型绑定失败的最常见原因是输入的$SQLServer = "Server\SQLEXPRESS"
$SQLDBName = "Prova"
$SqlQuery = "Select * from table_2 where id=1"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; trusted_connection=true;"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd
$Dataset = New-Object System.Data.DataSet
$SqlAdapter.Fill($Dataset)
$array=$Dataset.Tables[0]
$SqlConnection.Close()
属性与模型中属性的名称不匹配,首先应该检查html您的代码是实际产生。假设第一个项目中name
的值为DivisionId
,那么您生成的是
1
与您的模型无关。
<input name="1" type="hidden" value="{ @name = Divisions[0].DivisionId, @id = "Divisions_0__.DivisionId }" />
的属性 - 1
的结果,该属性不存在,并且是非法的
反正Model.Divisions[i].DivisionId.ToString()
的第二个参数是该属性的@Html.Hidden()
,
所以你告诉它使用你的匿名对象作为值value
什么都没做 - 使用的目的
@name="..."
方法是正确绑定到您的模型)只需使用
HtmlHelper
将生成正确的名称和值属性以绑定到您的集合。
话虽如此,你所拥有的只是隐藏的输入,所以生成所有额外的html,将它发送到浏览器并将其全部重新发送回来没有任何意义。如果您在POST方法中需要该集合,那么只需从您的存储库中获取它。
作为旁注,你的@for (int i = 0; i < Model.Divisions.Count; i++)
{
@Html.HiddenFor(m => m.Divisions[i].DivisionId)
@Html.HiddenFor(m => m.Divisions[i].Id)
@Html.HiddenFor(m => m.Divisions[i].Name)
}
毫无意义。添加new { @id = ".." }
属性的目的是在css和javascript / jquery选择器中使用,这对于集合项实际上没有意义,但在任何情况下都不起作用,因为你有一个id
(点)它将充当类名选择器