2012-07-25 64 views
0
  1. 单选按钮的选择问题,我在页面
  2. 4个部分,每部分有多个问题
  3. 每个问题有3个单选按钮。
  4. 我的单选按钮在4个部分中获得相同的名称和ID,而不是在问题级别唯一。 (我的问题)

我该如何解决这个问题?感谢MVC3 - 多问题

视图 - 表示部1仅

@using (Html.BeginForm(ActionNames.Index, ControllerNames.PaperSurveyQualityControl, new { Area = AreaNames.OngoingProjects }, FormMethod.Post, new { @id = "PaperSurveyQualityControlForm" })){  
@Html.HiddenFor(x => x.Header.SurveyValidationId)   
if (Model.PersonalInformation != null && Model.PersonalInformation.Count > 0)  
{   
<div class="distanceBottom">    
<table class="siteTable">     
<thead>      
<th style="width: 38%;">Description</th>      
<th style="width: 30%;">Keyed Value</th>      
<th style="width: 10%;"><center>Correct</center></th>      
<th style="width: 10%;"><center>Typo</center></th>      
<th style="width: 12%;"><center>Mismatched</center></th>     
</thead>     
<tbody>      
@foreach (var item in Model.PersonalInformation)      
{       
@Html.HiddenFor(x => item.CategoryCode)       
<tr>        
<td>@item.Description</td>        
<td>@item.KeyedValue</td>        
<td><center>@Html.RadioButtonFor(model => item.Response, "C")</center></td>        
<td><center>@Html.RadioButtonFor(model => item.Response, "T")</center></td>        
<td><center>@Html.RadioButtonFor(model => item.Response, "M")</center></td>       
</tr>      
}     
</tbody>    
</table>   
</div>  
} 
} 

源视图代码

<form action="/OngoingProjects/PaperSurveyQualityControl" id="PaperSurveyQualityControlForm" method="post"> 
<input data-val="true" data-val-number="The field SurveyValidationId must be a number." data-val-required="The SurveyValidationId field is required." id="Header_SurveyValidationId" name="Header.SurveyValidationId" type="hidden" value="1" />   
<div class="distanceBottom">    
<table class="siteTable">     
<thead>      
<th style="width: 38%;">Description</th>      
<th style="width: 30%;">Keyed Value</th>      
<th style="width: 10%;"><center>Correct</center></th>     
<th style="width: 10%;"><center>Typo</center></th>      
<th style="width: 12%;"><center>Mismatched</center></th>     
</thead>     

<tbody><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="FN" />       
<tr>        
<td>First Name</td>        
<td>Firstname</td>        
<td><center><input data-val="true" data-val-required="Message missing!" id="item_Response" name="item.Response" type="radio" value="C" /></center></td>        
<td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td>        
<td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td>       
</tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="LN" />      
<tr>        
<td>Last Name</td>        
<td>Lastname</td>        
<td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td>        
<td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td>        
<td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td>       
</tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="AD" /> 
         <tr> 
          <td>Address</td> 
          <td>123 Test</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="CT" /> 
         <tr> 
          <td>City</td> 
          <td>Marcelius</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="ST" /> 
         <tr> 
          <td>State</td> 
          <td>NV</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="ZC" /> 
         <tr> 
          <td>Zip Code</td> 
          <td>13108</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="EM" /> 
         <tr> 
          <td>Email</td> 
          <td>[email protected]</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr> 
       </tbody> 
      </table> 
     </div> 
     <div class="distanceBottom"> 
      <table class="siteTable"> 
       <thead> 
        <th style="width: 38%;">Description</th> 
        <th style="width: 30%;">Keyed Value</th> 
        <th style="width: 10%;"><center>Correct</center></th> 
        <th style="width: 10%;"><center>Typo</center></th> 
        <th style="width: 12%;"><center>Mismatched</center></th> 
       </thead> 
       <tbody><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="Q1" /> 
         <tr> 
          <td>Q1 - blah blah blah</td> 
          <td>A</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="Q2" /> 
         <tr> 
          <td>Q2 - blah blah blah</td> 
          <td>ADF</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="Q3" /> 
         <tr> 
          <td>Q3 - blah blah blah</td> 
          <td>BC</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="Q4" /> 
         <tr> 
          <td>Q4 - blah blah blah</td> 
          <td>D</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr> 
       </tbody> 
      </table> 
     </div> 
     <div class="distanceBottom"> 
      <table class="siteTable"> 
       <thead> 
        <th style="width: 38%;">Description</th> 
        <th style="width: 30%;">Keyed Value</th> 
        <th style="width: 10%;"><center>Correct</center></th> 
        <th style="width: 10%;"><center>Typo</center></th> 
        <th style="width: 12%;"><center>Mismatched</center></th> 
       </thead> 
       <tbody><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="S1" /> 
         <tr> 
          <td>Declared State 1</td> 
          <td>MO</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="S2" /> 
         <tr> 
          <td>Declared State 2</td> 
          <td>NY</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="S3" /> 
         <tr> 
          <td>Declared State 3</td> 
          <td>AZ</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr> 
       </tbody> 
      </table> 
     </div> 
     <div class="distanceBottom"> 
      <table class="siteTable"> 
       <thead> 
        <th style="width: 38%;">Description</th> 
        <th style="width: 30%;">Keyed Value</th> 
        <th style="width: 10%;"><center>Correct</center></th> 
        <th style="width: 10%;"><center>Typo</center></th> 
        <th style="width: 12%;"><center>Mismatched</center></th> 
       </thead> 
       <tbody><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="C1" /> 
         <tr> 
          <td>Declared College 1</td> 
          <td>US Naval Academy</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="C2" /> 
         <tr> 
          <td>Declared College 2</td> 
          <td>Don't know any others</td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="C3" /> 
         <tr> 
          <td>Declared College 3</td> 
          <td></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="C4" /> 
         <tr> 
          <td>Declared College 4</td> 
          <td></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr><input id="item_CategoryCode" name="item.CategoryCode" type="hidden" value="C5" /> 
         <tr> 
          <td>Declared College 5</td> 
          <td></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="C" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="T" /></center></td> 
          <td><center><input id="item_Response" name="item.Response" type="radio" value="M" /></center></td> 
         </tr> 
       </tbody> 
      </table> 
     </div> 
    <div class="distanceTop"> 
     <button type="submit" title="Update Email" id="ButtonUpdate" class="gradientbuttonRight gradientbutton gradientorange">Update</button> 
      <a id="ButtonExit" class="gradientbuttonLeft gradientbutton gradientblue" href="/OngoingProjects/PaperSurveyQualityControl/Exit?badEmailId=1" title="Exit">EXIT</a> 
    </div> 
</form> 

视图模型

using Sqc.BusinessEntities; namespace Sqc.ViewModels.OngoingProject{ 
    public partial class PaperSurveyQualityControlVideoModel { 
       public PaperSurveyQualityControlHeader Header { get; set; } 
     public List<PaperSurveyQualityControlItem> PersonalInformation { get; set; } 
     public List<PaperSurveyQualityControlItem> QuestionAnswers { get; set; } 
     public List<PaperSurveyQualityControlItem> DeclaredStates { get; set; } 
     public List<PaperSurveyQualityControlItem> DeclaredColleges { get; set; } 
     } 
} 

业务实体:

页眉

namespace Sqc.BusinessEntities{ public partial class PaperSurveyQualityControlHeader { 
     public int SurveyValidationId { get; set; } 
     public string ImageFront { get; set; } 
     public string ImageBack { get; set; } 
    } 
} 

项目

namespace Sqc.BusinessEntities{ public partial class PaperSurveyQualityControlItem { 
     public string CategoryCode { get; set; } 
     public string Description { get; set; } 
     public string KeyedValue { get; set; } 
      public string Response { get; set; } //C=Correct, T=Typo, M=Mismatch REQUIRED - radio button response 
    } 
} 

项目验证

using System.ComponentModel.DataAnnotations;using DataAnnotationsExtensions;using System.Web.Mvc; namespace Sqc.BusinessEntities{ 
    [MetadataType(typeof(PaperSurveyQualityControlItem.PaperSurveyQualityControlItemMetaData))] 
    public partial class PaperSurveyQualityControlItem { 
     public class PaperSurveyQualityControlItemMetaData  { 
      [Required(ErrorMessage = ValidationMessageConstants.MessageRequired)] 
      public string Response { get; set; } 
     } 
    } 
} 

回答

1

我会看的第一件事是菲尔哈克对结合名单后。实际上,这就是你正在尝试做的和索引你的投入可能会为你工作:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

我还要看看史蒂芬Sandersons岗位上编辑一个可变长度的名单。这是更高级的HtmlPrefixScopeExtensions采取了大量繁重的护理:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

+0

谢谢,我会考虑这些并不断更新。 – 2012-07-25 15:01:46

+0

谢谢,我跟着第一个链接,它为我工作。现在我只有这个概念,它正在工作。验证和模型回发也很完美。我将在下面介绍我的实现。 – 2012-07-26 16:52:55

0

@using(Html.BeginForm(ActionNames.Index,ControllerNames.PaperSurveyQualityControl,新{面积= AreaNames.OngoingProjects},FormMethod.Post ,新{@id = “PaperSurveyQualityControlForm”})){

@Html.HiddenFor(x => x.Header.SurveyValidationId) 


if (Model.PersonalInformation != null && Model.PersonalInformation.Count > 0) 
{ 
    <div class="distanceBottom"> 
     <table class="siteTable"> 
      <thead> 
       <th style="width: 38%;">Description</th> 
       <th style="width: 30%;">Keyed Value</th> 
       <th style="width: 10%;"><center>Correct</center></th> 
       <th style="width: 10%;"><center>Typo</center></th> 
       <th style="width: 12%;"><center>Mismatched</center></th> 
      </thead> 
      <tbody> 

       @for (var i = 0; i < Model.PersonalInformation.Count; i++) 
       { 
        @Html.HiddenFor(x => Model.PersonalInformation[i].CategoryCode) 
        <tr> 
         <td> 
          @Html.ValidationMessageFor(x => Model.PersonalInformation[i].Response) 
          @Model.PersonalInformation[i].Description 
         </td> 
         <td>@Model.PersonalInformation[i].KeyedValue</td> 
         <td><center>@Html.RadioButtonFor(model => Model.PersonalInformation[i].Response, "C")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.PersonalInformation[i].Response, "T")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.PersonalInformation[i].Response, "M")</center></td> 
        </tr> 
       } 

      </tbody> 
     </table> 
    </div> 
} 

if (Model.QuestionAnswers != null && Model.QuestionAnswers.Count > 0) 
{ 
    <div class="distanceBottom"> 
     <table class="siteTable"> 
      <thead> 
       <th style="width: 38%;">Description</th> 
       <th style="width: 30%;">Keyed Value</th> 
       <th style="width: 10%;"><center>Correct</center></th> 
       <th style="width: 10%;"><center>Typo</center></th> 
       <th style="width: 12%;"><center>Mismatched</center></th> 
      </thead> 
      <tbody> 
       @for (var i = 0; i < Model.QuestionAnswers.Count; i++) 
       { 
        @Html.HiddenFor(x => Model.QuestionAnswers[i].CategoryCode) 
        <tr> 
         <td> 
          @Html.ValidationMessageFor(x => Model.QuestionAnswers[i].Response) 
          @Model.QuestionAnswers[i].Description 
         </td> 
         <td>@Model.QuestionAnswers[i].KeyedValue</td> 
         <td><center>@Html.RadioButtonFor(model => Model.QuestionAnswers[i].Response, "C")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.QuestionAnswers[i].Response, "T")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.QuestionAnswers[i].Response, "M")</center></td> 
        </tr> 
       } 
      </tbody> 
     </table> 
    </div> 
} 


if (Model.DeclaredStates != null && Model.DeclaredStates.Count > 0) 
{ 
    <div class="distanceBottom"> 
     <table class="siteTable"> 
      <thead> 
       <th style="width: 38%;">Description</th> 
       <th style="width: 30%;">Keyed Value</th> 
       <th style="width: 10%;"><center>Correct</center></th> 
       <th style="width: 10%;"><center>Typo</center></th> 
       <th style="width: 12%;"><center>Mismatched</center></th> 
      </thead> 
      <tbody> 
       @for (var i = 0; i < Model.DeclaredStates.Count; i++) 
       { 
        @Html.HiddenFor(x => Model.DeclaredStates[i].CategoryCode) 
        <tr> 
         <td> 
          @Html.ValidationMessageFor(x => Model.DeclaredStates[i].Response) 
          @Model.DeclaredStates[i].Description 
         </td> 
         <td>@Model.DeclaredStates[i].KeyedValue</td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredStates[i].Response, "C")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredStates[i].Response, "T")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredStates[i].Response, "M")</center></td> 
        </tr> 
       } 
      </tbody> 
     </table> 
    </div> 
} 

if (Model.DeclaredColleges != null && Model.DeclaredColleges.Count > 0) 
{ 
    <div class="distanceBottom"> 
     <table class="siteTable"> 
      <thead> 
       <th style="width: 38%;">Description</th> 
       <th style="width: 30%;">Keyed Value</th> 
       <th style="width: 10%;"><center>Correct</center></th> 
       <th style="width: 10%;"><center>Typo</center></th> 
       <th style="width: 12%;"><center>Mismatched</center></th> 
      </thead> 
      <tbody> 
       @for (var i = 0; i < Model.DeclaredColleges.Count; i++) 
       { 
        @Html.HiddenFor(x => Model.DeclaredColleges[i].CategoryCode) 
        <tr> 
         <td> 
          @Html.ValidationMessageFor(x => Model.DeclaredColleges[i].Response) 
          @Model.DeclaredColleges[i].Description 
         </td> 
         <td>@Model.DeclaredColleges[i].KeyedValue</td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredColleges[i].Response, "C")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredColleges[i].Response, "T")</center></td> 
         <td><center>@Html.RadioButtonFor(model => Model.DeclaredColleges[i].Response, "M")</center></td> 
        </tr> 
       } 
      </tbody> 
     </table> 
    </div> 
}