使用外键时的验证问题

时间:2014-12-17 18:32:56

标签: asp.net asp.net-mvc-4 razor

型号:

 [Required]
 [Display(Name = "Rank")]
 [ForeignKey("ranks")]
 public virtual int Rank_id { get; set; }
 public virtual Rank ranks { get; set; }

查看:

 <div class="editor-label">
     @Html.LabelFor(model => model.Rank_id, "Rank")
 </div>
 <div class="editor-field">
     @Html.DropDownListFor(a => a.Rank_id, (SelectList)ViewBag.Rank_id, "Select Rank", new { id="RankId" })
     @Html.ValidationMessageFor(model => model.Rank_id)
 </div>

我以前用来绑定下拉列表的脚本:

 $('#IntroId').change(function () {    
     $.getJSON('/AgentRegister/BindRank/' + $('#IntroId').val(), function (data) {
         var items = '<option>Select Rank </option>';
         $.each(data, function (i, RankData) {
             items += "<option value'" + RankData.Value + "'>" + RankData.Text + "</option>";
         });

         $('#RankId').html(items);
     });
 });

它的节目“场地排名必须是一个数字。”但我选择了那个 enter image description here

我该怎么办?

编辑: 页面来源:

<div class="editor-field">
    <select data-val="true" data-val-number="The field Rank must be a number." data-val-required="The Rank field is required." id="RankId" name="Rank_id">
        <option value="">Select Rank</option>
        <option value="1">Agent</option>
        <option value="2">General Manager</option>
    </select>
    <span class="field-validation-valid" data-valmsg-for="Rank_id" data-valmsg-replace="true">     
    </span>
</div>

1 个答案:

答案 0 :(得分:0)

我不太确定,但我认为您需要将(SelectList)ViewBag.Rank_id更改为(SelectList)ViewBag.Ranks,并且您还要对@Html.ValidationMessageFor(model => model.Rank_id) rank_id进行验证,这是int,因此当您使用时,其值应为int绑定下拉onchange函数,您将值赋值给引号中的选项删除引号并检查它。

$.each(data, function (i, RankData) {

                items += "<option value=" + RankData.Value + ">" + RankData.Text + "</option>";
            });