仅更新没有隐藏字段的更改字段

本文关键字:字段 隐藏 更新 | 更新日期: 2023-09-27 18:35:59

我只需要更新数据库中的一个字段,即表单中的名称。我使用隐藏字段来更新/保留其余字段的值。这是我的观点

@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

如果我创建一个只有NameViewModel

public string Name { get; set; }

我不能显示其余的。我想显示所有更新Name

仅更新没有隐藏字段的更改字段

在这里找到解决方案: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");
}

是的,您可以为所有要忽略的字段放置禁用属性。

使用Jquery,你可以这样做

$(document).ready(function(){
$('input[type="hidden"]').attr("disabled","disabled");
})