2016-03-08 115 views
-1

我无法获取DropDownListFor以绑定到我的模型。 DisplayOrder返回null,VarietyFamilyID始终为0.我有一个未知数量的对象进行编辑,所以我试图使用EditorTemplate。DropDownListFor未绑定在EditorTemplate中

EditorTemplate视图

@model Wysocki_Variety_Management.Models.Image 

<div> 
    @Html.HiddenFor(i=>i.ImageStreamID) 
    @Model.helperString 
    @Html.DropDownListFor(i=>i.DisplayOrder, new SelectList(ViewBag.DisplayOptions, "Key", "Value")) 
    @Html.DropDownListFor(i => i.VarietyFamilyID, new SelectList(ViewBag.Variety, "VarietyFamilyID", "Name")) 
    @Ajax.ActionLink("Try Me", 
         "UpdateImage", 
         "Images", 
         new { s = Model.ImageStreamID, dislplayOrder = Model.DisplayOrder, familyID = Model.VarietyFamilyID }, 
         new AjaxOptions {}) 
</div> 

查看渲染模板

@model List<Wysocki_Variety_Management.Models.Image> 

@using (Html.BeginForm("UpdateImage", "Images")) 

{  
    <div> 
     @Html.EditorForModel() 
    </div> 
} 

控制器动作签名

public ActionResult UpdateImage(Guid s, int displayOrder,int familyID) 

编辑

不能确定下来表决Ø r评论。当我使用EditorTemplate和@ Html.EditorForModel时,我为模型的每个成员获得多个输入。

<form action="/Images/UpdateImage" method="post"> <div> 
     <div> 
    <input data-val="true" data-val-required="The Guid field is required." name="[0].ImageStreamID" type="hidden" value="e48aab34-0fe6-e511-8ebf-005056c00008" /> 

    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[0].DisplayOrder"><option value="312">Tuber</option> 
<option value="313">Plant</option> 
<option value="314">Marketing</option> 
</select> 
    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[0].VarietyFamilyID"><option value="0">Fianna</option> 
<option value="0">Linzer Delikatesse</option> 
<option value="3">Markies</option> 
<option value="0">Provento</option> 
<option value="5">Roko</option> 
<option value="6">75-11-15 Sprint</option> 
<option value="7">Alegria</option> 

</select> 
    <a data-ajax="true" href="/Images/UpdateImage?s=e48aab34-0fe6-e511-8ebf-005056c00008&amp;dislplayOrder=0&amp;familyID=0">Try Me</a> 
</div><div> 
    <input data-val="true" data-val-required="The Guid field is required." name="[1].ImageStreamID" type="hidden" value="e58aab34-0fe6-e511-8ebf-005056c00008" /> 

    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[1].DisplayOrder"><option value="312">Tuber</option> 
<option value="313">Plant</option> 
<option value="314">Marketing</option> 
</select> 
    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[1].VarietyFamilyID"><option value="0">Fianna</option> 
<option value="0">Linzer Delikatesse</option> 
<option value="3">Markies</option> 
<option value="0">Provento</option> 
<option value="5">Roko</option> 
<option value="6">75-11-15 Sprint</option> 
<option value="7">Alegria</option> 

</select> 
    <a data-ajax="true" href="/Images/UpdateImage?s=e58aab34-0fe6-e511-8ebf-005056c00008&amp;dislplayOrder=0&amp;familyID=0">Try Me</a> 
</div><div> 
    <input data-val="true" data-val-required="The Guid field is required." name="[2].ImageStreamID" type="hidden" value="e68aab34-0fe6-e511-8ebf-005056c00008" /> 

    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[2].DisplayOrder"><option value="312">Tuber</option> 
<option value="313">Plant</option> 
<option value="314">Marketing</option> 
</select> 
    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[2].VarietyFamilyID"><option value="0">Fianna</option> 
<option value="0">Linzer Delikatesse</option> 
<option value="3">Markies</option> 
<option value="0">Provento</option> 
<option value="5">Roko</option> 
<option value="6">75-11-15 Sprint</option> 
<option value="7">Alegria</option><option value="331">A02507-2LB</option> 

</select> 
    <a data-ajax="true" href="/Images/UpdateImage?s=e68aab34-0fe6-e511-8ebf-005056c00008&amp;dislplayOrder=0&amp;familyID=0">Try Me</a> 
</div><div> 
    <input data-val="true" data-val-required="The Guid field is required." name="[3].ImageStreamID" type="hidden" value="e78aab34-0fe6-e511-8ebf-005056c00008" /> 

    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[3].DisplayOrder"><option value="312">Tuber</option> 
<option value="313">Plant</option> 
<option value="314">Marketing</option> 
</select> 
    <select data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." name="[3].VarietyFamilyID"><option value="0">Fianna</option> 
<option value="0">Linzer Delikatesse</option> 
<option value="3">Markies</option> 
<option value="0">Provento</option> 
<option value="5">Roko</option> 
<option value="6">75-11-15 Sprint</option> 
<option value="7">Alegria</option> 
+0

你是什么意思_I有未知数量的对象edit_?您显示的视图只呈现一个对象,除非模型为“IEnumerable ”,在这种情况下,POST方法中的模型也必须为'IEnumerable ' –

回答

0

在您的视图模型是IEnumerable<Image>所以为了当您提交表单绑定,方法必须

[HttpPost] 
public ActionResult UpdateImage(IEnumerable<Image> model) 

和型号将包含3个正确绑定Image对象。

表单回发基于成功的表单控件的namevalue属性名称/值对和匹配DefaultModelBinder那些与你的参数和模型属性。目前,您方法中的参数为Guid s, int displayOrder, int familyID,并且值可能绑定到这些参数的唯一方法是如果您的表单包含name="s",name="displayOrder"name="familyID"的控件。

请注意,您在EditorTemplate中使用@Ajax.ActionLink()只会回发模型的初始值。如果你想发布表单控件的值,那么你需要提交表单。

+0

请参阅更新的答案。再读一遍你的问题,我只能假设你的印象是你的'Ajax.ActionLink()'会将表单控件的值发送给你的方法 - 它不会。 –

+0

感谢您的解释。有一天我会弄清楚这一切。 –