所以这是我的情况我有一个模型:
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时,此值已更改为整数值,该值似乎与表中记录的顺序相对应。同样在编辑视图中,显示的值是数字值与正确的字符串值。所以我认为它与模型绑定有关,但不确定如何解决它。
想知道是否有人知道问题可能是什么。
先谢谢
答案 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 =)