2010-11-18 11 views
1

Model:ASP.NET MVC2: Bir POST işleyicisinde daha fazla değişiklik için bir modelin güncelleştirilmesi.

public class Model 
{ 
    public ItemType Type { get; set; } 
    public int Value { get; set; } 
} 

public enum ItemType { Type1, Type2 } 

Denetleyici:

public ActionResult Edit() 
{ 
    return View(new Model()); 
} 

[HttpPost] 
public ActionResult Edit(Model model, bool typeChanged = false) 
{ 
    if (typeChanged) 
    { 
     model.Value = 0; // I need to update model here and pass for further editing 
     return View(model); 
    } 

    return RedirectToAction("Index"); 
} 

Ve elbette View: Ben beklediğiniz gibi

<div class="editor-label"><%: Html.LabelFor(model => model.Type) %></div> 
<div class="editor-field"> 
    <%: Html.DropDownListFor(
      model => model.Type, 
      Enum.GetNames(typeof(MvcApplication1.Models.ItemType)) 
       .Select(x => new SelectListItem { Text = x, Value = x }), 
      new { @onchange = "$(\'#typeChanged\').val(true); this.form.submit();" }    
     ) 
    %> 
    <%: Html.Hidden("typeChanged") %> 
</div> 

<div class="editor-label"><%: Html.LabelFor(model => model.Value) %></div> 
<div class="editor-field"><%: Html.TextBoxFor(model => model.Value) %></div> 

<input type="submit" value="Create" onclick="$('#typeChanged').val(false); this.form.submit();" /> 

(yorum ile) denetleyicisi kod çalışmaz. Gerekli davranışlara nasıl ulaşabilirim?

cevap

0

Burada yazdığım gibi multiple kez, HTML yardımcıları nasıl çalışır ve tasarım gereğidir: girdiyi oluştururken ilk önce POSTed değerine bakar ve bundan sonra yalnızca modeldeki değeri kullanır. Bu temel olarak, denetleyici eyleminde modele yapılan değişikliklerin tamamen yok sayılacağı anlamına gelir.

if (typeChanged) 
{ 
    ModelState.Remove("Value"); 
    model.Value = 0; // I need to update model here and pass for futher editing 
    return View(model); 
} 
:

Geçici bir ModelState değeri kaldırmaktır

İlgili konular