MVC3에 문제가있는 경우이 문제에 대한 게시물이 있지만 찾을 수 없습니다. 나는 틀린 일을해야만합니다. for 루프를 사용하여 목록을 반복하는 간단한보기 (Index.cshtml)가 있습니다. 각 반복에서 목록 항목 중 하나의 값이있는 두 개의 텍스트 입력을 출력합니다.MVC3 - 에디터를 사용하는 데 문제가 있습니다.
@{Html.BeginForm();}
@Html.Encode("\n")
@for (int i = 0; i < Model.SortOptions.Count; i++)
{
@Html.TextBoxFor(m => m.SortOptions[i].ColumnName);
@Html.Encode("\n");
@Html.TextBoxFor(m => m.SortOptions[i].Direction);
@Html.Encode("\n");
}
<input type="submit" value="Submit" />
@{Html.EndForm();}
저는보기에 GET 요청과 POST를위한 두 개의 컨트롤러가 있습니다. POST 버전은 GET 버전과 다른 항목을 목록에 추가합니다. 문제가 발생한 곳입니다. 페이지가 다시로드 된 후 텍스트 상자는 GET에로드 된 페이지와 동일한 값을 갖습니다.
처음에는 캐시 문제라고 생각했지만 코드를 수정하면 (아래 참조) 수동으로 텍스트 입력을 추가하고 html에 값을 삽입하면 브라우저에 새 값이 전송됩니다.
@{Html.BeginForm();}
@Html.Encode("\n")
@for (int i = 0; i < Model.SortOptions.Count; i++)
{
var columnNameName = string.Format("SortOptions[{0}].ColumnName", i);
var columnNameID = string.Format("SortOptions_{0}__ColumnName", i);
var directionName = string.Format("SortOptions[{0}].Direction", i);
var directionID = string.Format("SortOptions_{0}__Direction", i);
<input type="hidden" name="@columnNameName" id="@columnNameID" value="@Model.SortOptions[i].ColumnName" />
<input type="hidden" name="@directionName" id="@directionID" value="@Model.SortOptions[i].Direction" />
}
<input type="submit" value="Submit" />
@{Html.EndForm();}
나는 모델에 예상 값이 포함되어 있는지 확인하기 위해 코드를 단계별로 실행했습니다. 심지어보기에서 코드를 단계별로 실행하여 목록의 값을 검사했습니다. 올바른 값을 가지고있는 것처럼 보입니다. 그러나 브라우저에서 볼 때 페이지가 GET 요청에 응답했을 때와 일치해야하는 값이 있습니다. 에디터 템플릿에 문제가 있습니까? 방금 mvc3과 면도기 엔진을 사용하기 시작 했으므로 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.
----- UPDATE : ADDED 컨트롤러 코드 ----
[HttpGet]
public ActionResult Index()
{
var inv = new InventoryEntities();
var model = new IndexModel(inv);
model.SortOptions = new List<SortOption>();
model.SortOptions.Add(new SortOption { ColumnName = "Model", Direction = SortDirection.Ascending });
model.SortOptions.Add(new SortOption { ColumnName = "Make", Direction = SortDirection.Ascending });
//Load data
model.LoadEquipmentList();
return View(model);
}
[HttpPost]
[OutputCache(Duration = 1)]
public ActionResult Index(List<SortOption> sortOptions, SortOption sort)
{
var inv = new InventoryEntities();
var model = new IndexModel(inv);
ModelState.Remove("SortOptions");
model.SortOptions = new List<SortOption>();
model.SortOptions.Add(new SortOption { ColumnName = "Type", Direction = SortDirection.Descending });
model.SortOptions.Add(new SortOption { ColumnName = "SubType", Direction = SortDirection.Descending });
model.EquipmentList = new List<EquipmentListItem>();
model.EquipmentList.Add(new EquipmentListItem { ID = 3, AssignedTo = "Mike", Location = "Home", Make = "Ford", Model = "Pinto", Selected = false, SubType = "Car", Type = "Vehicle" });
return View(model);
}
컨트롤러 작업 코드를 게시 할 수 있습니까? – sarvesh
컨트롤러 코드가 게시되었습니다. – m9k5j