我只需要更新数据库中的一个字段,即表单中的名称。我使用隐藏字段来更新/保留其余的值。这是我的观点
@using (Ajax.BeginForm("ChangeHeaderName", "Rooms",
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "Post",
OnSuccess = "OnSuccess",
OnFailure = "OnFailure"
}))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.RoomId)
@Html.HiddenFor(model => model.RoomLink)
@Html.HiddenFor(model => model.Alias)
<div class="room-header-container">
<h2>@Html.EditorFor(m => m.Name, new { htmlAttributes = new { @id = "room-header", @class = "edit-header" } })</h2>
</div>
}
对于不想要更新的每个字段使用@Html.HiddenFor
感觉很愚蠢。
这是我的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeHeaderName(Room room)
{
if (ModelState.IsValid)
{
db.Entry(room).State = EntityState.Modified;
db.SaveChanges();
return PartialView("_UpdateHeader", room);
}
return View(room);
}
有没有隐藏文件的更好的解决方案吗?
修改/更新
我的模型中有这个
public int RoomId { get; set; }
public string Name { get; set; }
public Guid RoomLink { get; set; }
public bool UseAlias { get; set; }
public string Alias { get; set; }
public DateTime Created { get; set; }
我想向用户显示所有这些内容,但用户应该只能修改Name
如果我创建的ViewModel
只有Name
public string Name { get; set; }
我无法显示其余部分。我想显示除Name
答案 0 :(得分:1)
在此处找到解决方案:https://stackoverflow.com/a/23380525/5369591
if (ModelState.IsValid)
{
db.Registrations.Attach(registration); // attach in the Unchanged state
db.Entry(registration).Property(r => r.Date).IsModified = true;
// Date field is set to Modified (entity is now Modified as well)
db.SaveChanges();
return RedirectToAction("Index");
}
答案 1 :(得分:0)
是的,您可以为要忽略的所有字段设置disabled属性。
使用Jquery你可以这样做
$(document).ready(function(){
$('input[type="hidden"]').attr("disabled","disabled");
})
&#13;