0

My select taghelper가 컨트롤러에 선택된 항목을 전달하지 않습니다. 카운트는 항상 0입니다. 어떤 방향으로 부탁드립니다. 내 모델.net core 1.1 select taghelper pass mulitple 컨트롤러에 대한 목록 항목 선택 항상 카운트 0 표시

namespace SandBoxSelectList.Models 
{ 

public class Entry 
{ 
    [Key] 
    public int EntryID { get; set; } 

    public string EventName { get; set; } 


    public List<EntryClass> EntryClasses { get; set; } 

} 
public class EntryClass 
{ 
    [Key] 
    public int EntryClassId { get; set; } 

    public string ClassName { get; set; } 
    public int Classcode { get; set; } 

} 
} 

내 컨트롤러

 // GET: Entries/Create 
     var ec = new List<EntryClass> 
     { 
      new EntryClass 
      { 
       Classcode = 1, 
       ClassName = "NameofOne", 
       EntryClassId=1 
      }, 
      new EntryClass 
      { 
       Classcode = 2, 
       ClassName = "NameofRTwo", 
       EntryClassId =2 
      }, 
      new EntryClass 
      { 
       Classcode = 3, 
       ClassName = "NameofRThree", 
       EntryClassId = 3 
      }, 
      new EntryClass 
      { 
       Classcode = 4, 
       ClassName = "NameofFour", 
       EntryClassId = 4 
      }, 
     }; 
     ViewBag.FillForDropDown = ec.Select(x => new SelectListItem() 
     { 
      Text = x.ClassName, 
      Value = x.EntryClassId.ToString() 

     }); 
    return View(); 

후 컨트롤러 항목을 만들 수는 ENTRYID = 0, EventName을 = 반환 "올바른", EntryClasses는 = 0을 계산합니다.

// POST: Entries/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> 
    Create([Bind("EntryID,EventName,EntryClasses")] Entry entry) 
    { 
     if (ModelState.IsValid) 
     { 


      _context.Add(entry); 
      await _context.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 
     return View(entry); 
    } 

Create.cshtml

form asp-action="Create"> 
<div class="form-horizontal"> 
    <h4>Entry</h4> 
    <hr /> 
    <div asp-validation-summary="ModelOnly" class="text-danger"></div> 
    <div class="form-group"> 
     <label asp-for="EventName" class="col-md-2 control-label"></label> 
     <div class="col-md-10"> 
      <input asp-for="EventName" class="form-control" /> 
      <span asp-validation-for="EventName" class="text-danger"></span> 
     </div> 
    </div> 

    <div asp-validation-summary="ModelOnly" class="text-danger"></div> 

    <div class="form-group"> 
     <label asp-for="EntryClasses" class="col-md-2 control-label></label> 

     <select class="col-md-10" 
     id="EntryClassID" asp-for="EntryClasses"asp-items="@ViewBag.FillForDropDown" 
       name="EntryClasses" selected="selected" multiple="multiple"> 
     </select> 

     <span asp-validation-for="EntryClasses" class="text-danger"></span> 

    </div> 



    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
</form> 

<div> 
<a asp-action="Index">Back to List</a> 
</div> 

@section Scripts { 
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");} 
} 

답변

0

상관없이 내가 선택 taghelper, 모든 내가라는 항목에 바인딩하고 객체에 나타납니다없는 목록을 구성하는 방법. EntryClasses는 항상 count = 0입니다. 해결 방법은 ModelState Values ​​하위 키 AttepemtedValue에서 사용자가 선택한 항목을 찾았습니다.

결과를 사용하여 레코드 컨텍스트를 쿼리했습니다.

string attemptedvalue = ModelState.Values.Last().AttemptedValue; 
      string[] b = attemptedvalue.Split(','); 

하위 키는 bind 문과 동일한 순서로 나타납니다. 나는 그것이 작동하는 예를 발견 할 수있을 때까지 부러진 것에 투표합니다.