创建EditorTemplate MVC3

时间:2012-02-29 04:12:21

标签: jquery asp.net-mvc-3

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

1 个答案:

答案 0 :(得分:3)

您可以为StarRating属性创建一个editortemplate,该属性应位于以下两个位置之一:

  • 〜/查看/共享/ EditorTemplates /
  • 〜/浏览次数// EditorTemplates /

从那里,您可以使用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" })
}