2

自動生成されない複合主キーとして使用されている2つのフィールドがあります。現在、編集ビューでは、これら2つのフィールドは読み取り専用であり、編集することはできません。では、どのように編集を行うことができますか...?

モデル:

[Key][Column (Order=0)]
[Required]
public string LOV_COLUMN { get; set; }
[Key][Column(Order = 1)]
[Required]   
public string LOV_CODE { get; set; }
[Required]   
public string LOV_DESC{ get; set; }  
public string COLUMN_TYPE { get; set; }
public string LOV_STATUS { get; set; }

コントローラ:

public ActionResult Edit(string LOV_COLUMN= "", string LOV_CODE="")
{
    return View(dv.LOV.Find(LOV_COLUMN, LOV_CODE) ?? new ADM_LOV_Master());
}

[HttpPost]
public ActionResult Edit(ADM_LOV_Master entity, FormCollection form)
{
    try
    {
        var model = dv.LOV.Find(entity.LOV_COLUMN, entity.LOV_CODE);
        TryUpdateModel<ADM_LOV_Master>(model, form.ToValueProvider());
        dv.Entry<ADM_LOV_Master>(model).State = System.Data.EntityState.Modified;
        dv.SaveChanges();
        return RedirectToAction("Index");                
    }
    catch 
    {               
        return View();
    }
}

Edit View Code as:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>LOV_Master</legend>       

    <table>
    <tr>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_COLUMN)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_COLUMN)
        @Html.ValidationMessageFor(model => model.LOV_COLUMN)
    </div>
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_CODE)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_CODE)
        @Html.ValidationMessageFor(model => model.LOV_CODE)
    </div>
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_DESC)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.LOV_DESC)
        @Html.ValidationMessageFor(model => model.LOV_DESC)
    </div>
    </td>
    </tr>
    <tr>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.COLUMN_TYPE)
    </div>
    <div class="editor-field">
        @*@Html.EditorFor(model => model.COLUMN_TYPE)*@
        @Html.RadioButtonFor(model => model.COLUMN_TYPE, "C", new { id = "COLUMN_TYPE_false"})
        <label for="COLUMN_TYPE_true">Character</label>             
        @Html.RadioButtonFor(model => model.COLUMN_TYPE, "N", new { id = "COLUMN_TYPE_true"})
        <label for="COLUMN_TYPE_true">Number</label>                        
        @Html.ValidationMessageFor(model => model.COLUMN_TYPE)            
    </div>        
    </td>
    <td>
    <div class="editor-label">
        @Html.LabelFor(model => model.LOV_STATUS)
    </div>
    <div class="editor-field">
        @*@Html.EditorFor(model => model.LOV_STATUS)*@
        @Html.RadioButtonFor(model => model.LOV_STATUS, "Y", new { id = "LOV_STATUS_true"})
        <label for="LOV_STATUS_true">Yes</label>                
        @Html.RadioButtonFor(model => model.LOV_STATUS, "N", new { id = "LOV_STATUS_false" })
        <label for="LOV_STATUS_true">No</label>     
        @Html.ValidationMessageFor(model => model.LOV_STATUS)
    </div>
    </td>

    </tr>

</table>

</fieldset>
}
4

1 に答える 1

3

主キーは不変である必要があります。主キーとしてID(int、GUID)を使用し、一意の制約のみを持つ代理キーとしてこれらを追加することを強くお勧めします。他のテーブルのこのデータを参照しているデータがあると、制約違反が発生し、これは悪夢になるためです。

于 2012-05-16T12:36:42.403 に答える