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

时间:2016-02-23 10:21:50

标签: c# forms entity-framework asp.net-mvc-4

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

@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

之外的所有内容

2 个答案:

答案 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你可以这样做

&#13;
&#13;
$(document).ready(function(){

$('input[type="hidden"]').attr("disabled","disabled");

})
&#13;
&#13;
&#13;