2012-07-14 18 views
5

Bu konuyla ilgili birçok soru var ama bir şekilde bu bağlamayı işime alamıyorum ve hala Gönderilen Görünüm Modelimde boş değerler almak. Bu İşte Ana Görünüm Modeli Burada.NET MVC 4 Güçlü bir şekilde yazılan ViewModel içeren EditorFor ve EditorTemplate ile güçlü bir şekilde yazılan model kısmi görünüm bağlama yok

public class RoleVM { 

[Required] 
[Display(Name = "Name of the Role")] 
public string Role {get; set;} 

public IEnumerable<RolePermission> permissions { get; set; } 

} 

RolePermission Sınıf İşte

public class RolePermission { 

public int id; 

public bool permission_value; 

public string name { get; set; } 

} 

olduğu

MVC 4. olduğu denetleyici İşte

public ActionResult Create() { 

     RoleVM role_vm = new RoleVM(); 

     var allpermissions = from p 
     in permission_repo.GetPermissions() 
     select p; 

     role_vm.permissions = from p 
     in allpermissions 
     select new RolePermission 
     { name = p.name, id = p.PermissionId, permission_value = false }; 

     return View(role_vm); 
    } 

yılında Yöntemi oluştur GET Create.cshtml dosyası

'dir.
@model RoleVM 
@using (Html.BeginForm("Create", "Role", 
FormMethod.Post, new { @class = "permission_form" })) 
{ 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>RoleVM</legend> 

    <div class="form-item"> 
     @Html.LabelFor(model => model.Role) 

     @Html.EditorFor(model => model.Role) 
     @Html.ValidationMessageFor(model => model.Role) 
    </div> 

    @Html.EditorFor(model => model.permissions) 

    <p> 
     <input class="submit-btn" type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

burada Sonraki ~/Views bulunan rolepermissions.cshtml dosyasıdır/Paylaşımlı/EditorTemplates

İşte
@model RolePermission 

<div class="form-item"> 
     @Html.HiddenFor(modelItem => modelItem.id) 
     @Html.LabelFor(modelItem => modelItem.permission_value, Model.name) 
     @Html.CheckBoxFor(modelItem => modelItem.permission_value) 
</div> 

sayfada oluşturulur html öğelerinden biri bir örnektir

<div class="form-item"> 

     <input data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." id="permissions_2__id" name="permissions[2].id" type="hidden" value="3" /> 

     <label for="permissions_2__permission_value">Role-Edit</label> 
     <input data-val="true" data-val-required="The Boolean field is required." id="permissions_2__permission_value" name="permissions[2].permission_value" 
type="checkbox" value="true" /><input name="permissions[2].permission_value" type="hidden" value="false" /> 

</div> 
Nihayet burada

bağlayıcı üzerinde

[HttpPost] 
    public ActionResult Create(RoleVM rolevm) 
    { 

     //In here rolevm.role is populated based on the textbox input 
     //However rolevm.permissions is there with the correct 
     //number of items, but the values all are not binded 
     // id is null, name is empty, and permission_value is false 
     // regardless of which checkboxes were checked 


     return RedirectToAction("Index"); 
    } 

Herhangi bir yardım olduğunu POST yöntemini yarat yayınlanan model ile dava açmak gerçekten harika olurdu.

cevap

11

Bu basit bir sorundu, eğer birisi başka biriyle karşılaşırsa belki bu onlara yardımcı olacaktır. Getiri ile mülk olarak beyan edilen sınıfta mülkler yoktu; set;

public class RolePermission { 

public int id { get; set; } 

public bool permission_value { get; set; } 

public string name { get; set; } 

} 
+0

Çok teşekkür ederim! – Evgeny

+1

Dostum bana yardımcı oldu, neden benim model bağlamanın formdan belirli değerleri yayınlamadığını merak ettim, sonra bunu okudum ve viewModel'imi kontrol edeceğimi ve özelliklerin – John

+0

özelliklerinde herhangi bir erişiminin bulunmadığından emin olduğunu söyledi Ama neden erişimcileri buldunuz? gerekmektedir? Varlığı hidratlaştırmak için mülkün altında bir şey mi ayarlıyorsunuz? – ruffin

İlgili konular