2010-03-30 9 views
2

Html.EditorFor()에서 예기치 않은 동작이 발생합니다.ASP.NET MVC 2에서 예기치 않은 Html.EditorFor 동작

나는이 컨트롤러가 :

[HandleError] 
public class HomeController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Lister() 
    { 
     string[] values = { "Hello", "world", "!!!" }; 

     return View(values); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Lister(string[] values) 
    { 
     string[] newValues = { "Some", "other", "values" }; 

     return View(newValues); 
    } 
} 

을 그리고 이것은이 두 가지 작동하기위한 것입니다 내보기입니다 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<string[]>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Lister 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Lister</h2> 

    <% using (Html.BeginForm()) { %> 
     <% foreach (string value in Model) { %> 
      <%= value %><br /> 
     <% } %> 
     <%= Html.EditorForModel() %> 
     <input type="submit" value="Append Dashes" /> 
    <% } %> 

</asp:Content> 

그리고 을 문제가 있음을 다시 게시물이 이루어질 때 보기에서 올바른 동작을 수행하지만 foreach 루프가 새 값을 출력하는 동안 텍스트 상자는 원래 hello world 데이터를 계속 표시합니다. ASP.NET에서 무언가가 내 모델 값을 텍스트 상자 업데이트에서 무시하는 것처럼 느껴지고 이전의 동일한 값만 표시됩니다.

IEnumerable로 EditorFor를 배우려고 할 때이 문제점을 발견했습니다.

답변

2

이것은 문제가되지 않으며 정상적인 동작입니다. 모든 도우미는 그런 식으로 일합니다. 먼저 바인딩 된 값과 모델을보고 바인딩을 수행합니다. 즉 컨트롤러 액션에서 모델을 수정하더라도 초기 게시 된 값을 사용하게됩니다.

관련 질문 :

+0

글쎄, 내 목적을 위해 조금 짜증나는 그게 전부는 당신이 그것에 대해 문서로 링크를하는 일이 무엇입니까? –

+0

이것이 문서화 된 동작인지 확실하지 않습니다. 필자가 제공 한 두 번째 링크는 필 하크 (Phil Haack)의 대답으로 충분하다. –

관련 문제