我想为jquery星级评分插件创建一个editortemplate。这是我的第一个mvc3项目和jquery的新手,我不知道如何设置一个。我想做的是让用户按星级评分教师。因此,例如,如果我点击3颗星,我怎么能传递3进来传入的所有其他信息,以便我可以在数据库中保存该数字。在进行局部视图后,我将如何在实际视图中引用它?谢谢你的建议。
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Teachers Ratings Wall</legend>
<div class="editor-label">
@Html.LabelFor(model => model.StarRating)
</div>
<div class="editor-label">
@*@Html.EditorFor(model => model.StarRating)*@
@Html.ValidationMessageFor(model => model.StarRating)
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PostComment)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PostComment)
@Html.ValidationMessageFor(model => model.PostComment)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
所以在局部视图中,我会不会:
@model SpeakOut.Model.TeachersRatingsWall
<script src="../../Scripts/jquery.rating.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.rating.pack.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.MetaData.js" type="text/javascript"></script>
<link href="../../Content/jquery.rating.css" rel="Stylesheet" type="text/css" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
<input name="star1" type="radio" class="star" />
答案 0 :(得分:3)
您可以为StarRating
属性创建一个editortemplate,该属性应位于以下两个位置之一:
从那里,您可以使用UIHintAttribute
并装饰模型的属性(如果它是唯一类型),您可以根据类型命名模板,或者您可以将其称为完全自定义的内容并引用模板,当你去显示编辑器。
为了演示,我将其称为“StarRating”,这意味着我可以将[UIHint("StarRating")]
应用于该属性,或使用@Html.EditorFor(x => x.StarRating, "StarRating")
让它应用此模板。
接下来是创建实际模板。鉴于您看起来已经包含了必要的脚本,这只是自定义输出的问题。所以,我们在这里有模板:
<强>〜/查看/共享/ EditorTemplates / StarRating.cshtml 强>
@model Int32
@* I don't know how high a rating you want, but I'll assume a 1-5 rating *@
@for (Int32 rating = 1; rating <= 5; r++)
{
@Html.RadioButtonFor(x => x, rating, new { @class = "star" })
}
现在我知道它是一个int,我可能用UIHint
装饰你的模型,然后正常调用EditorFor
,MVC将负责其余的工作。 e.g:
<强> YourViewModel.cs 强>
[UIHint("StarRating")]
[Range(1, 5, ErrorMessage = "Invalid rating")]
public Int32 StarRating { get; set; }
<强>〜/查看/ myController的/ MyForm.cshtml 强>
@Html.EditorFor(model => model.StarRating)
<强>〜/查看/共享/ EditorTemplates / StarRating.cshtml 强>
@model Int32
@for (Int32 rating = 1; rating <= 5; r++)
{
@Html.RadioButtonFor(model => model, rating, new { @class = "star" })
}