模型绑定上的MVC 4 EF 5 ID字段更改值

时间:2013-06-23 16:58:07

标签: entity-framework asp.net-mvc-4

所以这是我的情况我有一个模型:

public class Label
{
    [Key]
    [MaxLength(20, ErrorMessageResourceType = typeof(Validation), ErrorMessageResourceName = "MaxLength")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string ID { get; set; }

    public string en { get; set; }

    public string fr { get; set; }

    public string es { get; set; }

    public string ar { get; set; }
}

控制器动作如下:

   public ActionResult Edit(int id = 0)
    {
        Criteria criteria = db.Criteria.Find(id);
        if (criteria == null)
        {
            return HttpNotFound();
        }

        Label label = dbl.Labels.Where(l => l.ID == criteria.Label).FirstOrDefault();

        return View(label);
    }

并发布:

 [HttpPost]
    public ActionResult Edit(Label label)
    {
        if (ModelState.IsValid)
        {

            Label L = dbl.Labels.Find(label.ID);
            L.en = label.en;

            dbl.SaveChanges();

        }

        return View(label);
    }

和一个看起来像的视图:

@model RAPID.Models.Translation.Label

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Criteria</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ID)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ID)
        @Html.ValidationMessageFor(model => model.ID)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.en)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.en)
        @Html.ValidationMessageFor(model => model.en)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.es)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.es)
        @Html.ValidationMessageFor(model => model.es)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.fr)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.fr)
        @Html.ValidationMessageFor(model => model.fr)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.ar)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ar)
        @Html.ValidationMessageFor(model => model.ar)
    </div>
    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

}

我遇到的问题是由于某种原因,当我检查编辑(get)中的label.ID时,该值是与该字段关联的正确字符串值。现在,当我在帖子上检查同一个值label.ID时,此值已更改为整数值,该值似乎与表中记录的顺序相对应。同样在编辑视图中,显示的值是数字值与正确的字符串值。所以我认为它与模型绑定有关,但不确定如何解决它。

想知道是否有人知道问题可能是什么。

先谢谢

2 个答案:

答案 0 :(得分:0)

我想这是因为你在编辑页面上有id,然后你做了一个帖子,它用url(routevalue)中的id覆盖了你的字符串ID。不确定。你的代码在某些方面有点混乱:

Label label = dbl.Labels.Where(l => l.ID == criteria.Label).FirstOrDefault();

替换为:

Label label = dbl.Labels.FirstOrDefault(l => l.ID == criteria.Label);


criteria.Label是一个字符串我猜或是项目?您应该将其命名为LabelID。因为它令人困惑^^。 我认为您可以通过将标签类中的ID重命名为LabelID之类的东西来解决所有这些问题。然后系统不会与2个ID混淆。

答案 1 :(得分:0)

或者您可以在模型中创建一个访问者,例如公共字符串LabelID { get{return ID}; set{ID = value}; },并使用它来间接修改ID =)