2012-07-14 10 views
5

इस बारे में बहुत सारे प्रश्न हैं ... लेकिन किसी भी तरह से मैं काम करने के लिए बाध्यकारी नहीं कर सकता और मैं अभी भी मेरे पोस्ट व्यू मॉडल में शून्य मान प्राप्त करना। यह MVC 4..NET MVC 4 मजबूत टाइप किए गए व्यूमोडेल जिसमें संपादक के साथ मजबूत टाइप किए गए मॉडल हैं और संपादक टेम्पलेट आंशिक दृश्य बाध्यकारी नहीं

है यहाँ मुख्य दृश्य मॉडल

public class RoleVM { 

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

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

} 

यहाँ RolePermission कक्षा

public class RolePermission { 

public int id; 

public bool permission_value; 

public string name { get; set; } 

} 

यहाँ है है प्राप्त नियंत्रक

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); 
    } 

यहाँ में विधि बनाएं Create.cshtml फ़ाइल

है
@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> 
} 

यहाँ अगला rolepermissions.cshtml में ~/दृश्य स्थित फ़ाइल है/साझा/EditorTemplates

@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> 

यहाँ एचटीएमएल आइटम उस पृष्ठ पर प्रदान की गई है में से एक का एक उदाहरण है

<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> 

अंत में यहां पोस्ट विधि बनाएं

[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"); 
    } 

बाध्यकारी पर कोई भी सहायता है पोस्ट मॉडल के साथ मुकदमा वास्तव में महान होगा।

उत्तर

11

यह एक साधारण मुद्दा था, अगर कोई और इसे पार करता है तो इससे उन्हें मदद मिलेगी। मेरे पास गुणों के रूप में घोषित वर्ग पर गुण नहीं थे; सेट;

public class RolePermission { 

public int id { get; set; } 

public bool permission_value { get; set; } 

public string name { get; set; } 

} 
+0

आपको बहुत बहुत धन्यवाद! – Evgeny

+1

मुझे दोस्त की मदद की, यह सोच रहा है कि क्यों मेरा मॉडल बाइंडिंग फॉर्म से कुछ मूल्यों को पोस्ट नहीं कर रहा था, मैंने फिर इसे पढ़ा और कहा कि मैं अपना दृश्य जांचूंगा मॉडल और सुनिश्चित करें कि पर्याप्त कुछ गुणों के गुण – John

+0

पर कोई एक्सेसर्स नहीं थे लेकिन क्या आपको पता चला कि एक्सेसर्स क्यों आवश्यक हैं? क्या इकाई को हाइड्रेट करने के लिए एक्सेसर के तहत संपत्ति को सेट करना कुछ है? – ruffin

संबंधित मुद्दे