如何解决我们可以在模型资料夹中使用属性别名吗?
MVC的新手。
我的ViewModel
如下:
Namespace ViewModels
Public Class MovieViewModel
Public Property Id As Integer
<Display(Name:="Release Year")>
Public Property ReleaseYear As Integer
Public Property Rating As String
Public Property Price As Decimal
Public Property Title As String
Public Property Genres As List(Of Db.Genre)
Public Property GenreCheckBox As List(Of GenreCheckBox)
End Class
End Namespace
对于GenreCheckBox
属性,我不得不使用一个我不喜欢的名称,以便将发布的值返回到ViewModel中:
<HttpPost>
<ValidateAntiForgeryToken>
Public Function Edit(ViewModel As MovieViewModel) As ActionResult
Dim oUnchecked As Func(Of GenreCheckBox,Boolean)
Dim oChecked As Func(Of GenreCheckBox,Boolean)
Dim oMovie As Db.Movie
Dim oGenre As Db.Genre
If Me.ModelState.IsValid Then
Using oDb As Db.Context = Db.Context.Create
oMovie = oDb.Movies.Include(Function(Movie) Movie.Genres).SingleOrDefault(Function(Movie) Movie.Id = ViewModel.Id)
If oMovie Is Nothing Then
Edit = Me.HttpNotFound
Else
oUnchecked = Function(CheckBox) CheckBox.IsChecked = False
oChecked = Function(CheckBox) CheckBox.IsChecked = True
oMovie.ReleaseYear = ViewModel.ReleaseYear
oMovie.Rating = ViewModel.Rating
oMovie.Price = ViewModel.Price
oMovie.Title = ViewModel.Title
ViewModel.GenreCheckBox.Where(oUnchecked).ForEach(Sub(CheckBox)
^ oGenre = oDb.Genres.Single(Function(Genre) Genre.Id = CheckBox.Id)
| oMovie.Genres.Remove(oGenre)
Ugly End Sub)
ViewModel.GenreCheckBox.Where(oChecked).ForEach(Sub(CheckBox)
^ oGenre = oDb.Genres.Single(Function(Genre) Genre.Id = CheckBox.Id)
| oMovie.Genres.Add(oGenre)
Ugly End Sub)
oDb.SaveChanges()
End If
End Using
Edit = Me.RedirectToAction(NameOf(MoviesController.Index))
Else
Edit = Me.View(ViewModel)
End If
End Function
我希望它像CheckBoxes
之类的东西,但是模型装订工会咳嗽然后吐出来。它希望HTML元素名称与.NET类型名称相同。 (我将讨论here的技术用于集合绑定。)
这是我观点的相关部分:
<div class="form-group">
@Html.LabelFor(Function(Model) Model.Genres,htmlAttributes:=New With {.Class = "control-label col-md-2"})
<div class="col-md-10">
@For iIndex As Integer = 0 To Model.GenreCheckBox.Count - 1
Dim sCheckBoxIsChecked As String
Dim sCheckBoxLabel As String
Dim sCheckBoxId As String
Dim oCheckBox As GenreCheckBox
sCheckBoxIsChecked = String.Format("GenreCheckBox[{0}].IsChecked",iIndex)
sCheckBoxLabel = String.Format("GenreCheckBox[{0}].Label",iIndex)
sCheckBoxId = String.Format("GenreCheckBox[{0}].Id",iIndex)
oCheckBox = Model.GenreCheckBox(iIndex)
@Html.Hidden(sCheckBoxLabel,oCheckBox.Label)
@Html.Hidden(sCheckBoxId,oCheckBox.Id)
@:<label>@Html.CheckBox(sCheckBoxIsChecked,oCheckBox.IsChecked) @oCheckBox.Label</label><br />
Next
</div>
</div>
该代码有效,但是属性名称不易读。是否存在可以用来装饰属性的属性,以便将其他名称发送给模型绑定器?
遵循这些思路的概念,类似于EF中的TableAttribute.Name
:
<UseThisAlias(Name:="GenreCheckBox")>
Public Property CheckBoxes As List(Of GenreCheckBox)
VB或C#,都可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。