我想为一个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/

10-12 12:52
查看更多