我想为一个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" />
最佳答案
您可以为StarRating
属性创建一个editortemplate,该属性应位于以下两个位置之一:
〜/ Views / Shared / EditorTemplates /
〜/ Views // EditorTemplates /
从那里,您可以使用UIHintAttribute
并装饰模型的属性(如果它是唯一类型),则可以根据类型命名模板,也可以对其进行完全自定义,并在转到时引用模板显示编辑器。
为了演示起见,我将其称为“ StarRating”,这意味着我可以将[UIHint("StarRating")]
应用于属性,也可以使用@Html.EditorFor(x => x.StarRating, "StarRating")
使其应用此模板。
接下来是创建实际的模板。既然看起来您已经包含了必要的脚本,那么只需定制输出即可。因此,这里有模板:
〜/ Views / Shared / 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" })
}
更新资料
既然我知道这是一个整数,我可能会用
UIHint
装饰您的模型,然后正常调用EditorFor
,MVC将处理其余的工作。例如。:YourViewModel.cs
[UIHint("StarRating")]
[Range(1, 5, ErrorMessage = "Invalid rating")]
public Int32 StarRating { get; set; }
〜/ Views / MyController / MyForm.cshtml
@Html.EditorFor(model => model.StarRating)
〜/ Views / Shared / EditorTemplates / StarRating.cshtml
@model Int32
@for (Int32 rating = 1; rating <= 5; r++)
{
@Html.RadioButtonFor(model => model, rating, new { @class = "star" })
}
关于jquery - 创建一个EditorTemplate MVC3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9493493/