2012-11-05 3 views
1

ICollection<String>이 내보기로 전달되고 foreach를 사용하여 부분 뷰를로드합니다. 그것은 정확한 횟수만큼 순환하지만, 통과하는 값은 동일하고, 모델에서 이것이 사실이 아니라는 것을 알고 있습니다.첫 번째 값 이후 뷰 루프 값이 변경되지 않습니다.

컨트롤러 :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View("Index", new List<String>()); 
    } 

    [HttpPost] 
    public ActionResult Index(List<String> txtValue) 
    { 
     return View("Index", txtValue); 
    } 
} 

보기 :의

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<String>>" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Home 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<script type="text/javascript"> 
    //Deletes the div the Control is in. 
    $(".delete").live("click", function() { 
     $(this).parent().remove(); 
    }); 

    //Adds the TextBoxes to divControls 
    function AddTextBox(Value) { 
     var elements = "<div><input name=\"txtValue\" type=\"text\" /><input type=\"button\" class=\"delete\" value=\"-\" /><br/></div>"; 
     $("#divControls").append(elements); 
    } 
    </script> 

<h2>Controls!!!</h2> 
<input id="btnAdd" type="button" name="Refresh" value="+" onclick="AddTextBox()" /> 
<% using (Html.BeginForm()) 
    { %> 
    <input id="btnsubmit" type="submit" name="Submit" onclick="Submit" /> 
    <div id="divControls"> 
<% 
     foreach (var text in this.Model) 
     { %> 
      <%=Html.TextBox("txtValue", text, new { id = "Value", name = "txtValue" })%> 
      <% Html.RenderPartial("TextControl", text); 
     } 
%> 
    </div> 
<% 
    } 
%> 
</asp:Content> 

TextControl.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %> 

<div> 
    <%=Html.TextBox("txtValue", this.Model, new { id = "Value", name = "txtValue" }) %> 
    <input id="btn" type="button" class="delete" value="-" /><br/> 
</div> 

값 컨트롤러에서보기로 전달 된 모델은 올바른지, 사용자 컨트롤 "TextControl"에 전달 된 경우에도 값은 정확하지만 텍스트 상자가 표시되면 원래 모델의 처음 값으로 전달됩니다.

Ex .

Model as List<String> { "1", "2", "3", "4" } 

뷰에 전달, "TextControl"는 Html.TextBox("name", this.Model)을 만들 수있는 올바른 문자열을 전달, 제대로 하나 하나를 반복합니다. 그러나 모든 디버깅 측면에서 올바른 것처럼 보이지만 모든 텍스트 상자가 완료되면 "1"(또는 목록의 첫 번째 값)이됩니다. http://www.sendspace.com/file/sypl1u

참고 : 난 그냥 <input type="text" name="txtValue" value="<%= this.Model %>" />을 대신 사용하는 솔루션을 함께했다

여기 내 정확한 코드에 대한 링크입니다.

+0

나는 당신의 제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

내가 증가하지 않는다고 말하는거야? – Jan

+1

'i'는 분명히 증가합니다. 문제는 코드의 다른 부분에 있어야합니다. – climbage

답변

2

잠재적 인 문제 :은 IList 인수의 특수 동작을 fave하는 LINQ 메서드이지만 일부 쿼리의 결과로 txtValue을 전달할 수 있습니다. 이 경우 ElementAt은 여러 번 열거해야 할 대소 문자 시퀀스 일 수 있으며 시퀀스를 다시 열거 할 수없는 경우에도 실패 할 수 있습니다.

대신 컬렉션 foreach 간단한 고려 :

foreach (var text in Model) 
    { 
     Html.RenderPartial("TextControl", text); 
    } 
+0

아니, 여전히 일반 for 루프와 동일한 기능을 수행합니다. – Shelby115

관련 문제