I have two fields being used as composite primary key which are not auto generated. Now in Edit view, these two fields are read only, not able to edit them. So how can editing be done…?
Model:
[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; }
Controller:
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>
}
Primary Keys should be immutable, I would strongly encourage using an ID (int, GUID) as the primary key that is and then add these as a surrogate key with a unique constraint only. I am saying this because if any data refers to this data in any other table you will get constraint violations and this will be a nightmare for you.