2012-05-16 75 views
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> 
} 
+0

显示视图的代码,更简单的方法发布更正。 – linkerro

+0

你是什么意思“无法编辑”?我使用@ Html.EditorForModel尝试了这一点,并且可以对视图中的关键属性进行更改。 – McGarnagle

+0

发布编辑视图的代码。 – user13

回答

3

主键应该是不可变的,我会强烈鼓励使用ID(INT,GUID)作为主键即然后将它们添加为仅具有唯一约束的代理键。我这样说是因为如果有任何数据在其他表中引用了这些数据,那么您将受到违反约束条件的限制,这对您而言将是一场噩梦。