필자는 회사 모델과 직원 모델을 보유하고 있으며 회사를 만든 다음 회사의 여러 직원을 하나의 관점에서 만들고 싶습니다.C# ASP.NET MVC에서 한 번에 여러 항목을 만드는 방법은 무엇입니까?
보기에서 어떻게해야합니까?
그리고이 다중 항목보기를 지원하기 위해 POST 작성 방법을 어떻게해야합니까?
필자는 회사 모델과 직원 모델을 보유하고 있으며 회사를 만든 다음 회사의 여러 직원을 하나의 관점에서 만들고 싶습니다.C# ASP.NET MVC에서 한 번에 여러 항목을 만드는 방법은 무엇입니까?
보기에서 어떻게해야합니까?
그리고이 다중 항목보기를 지원하기 위해 POST 작성 방법을 어떻게해야합니까?
은 정말 얘기하지만, 여기에 무엇을 아무 생각이없는 야생 추측 : 한 항목 Foo
, 여러 enries, IEnumerable<Foo>
. 친숙한가요? 내가 질문을 이해한다면
,이 글 관련되어 있다고 생각 : http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx
나의 제안은 적절 필드 이름을 지정하여 기본 모델 바인더의 행동을 활용하는 것입니다. 다양한 상황에 대한 구체적인 명명 규칙에 대해서는이 기사를 참조하십시오.
EDIT : 아래보기 로직을 추가했습니다. 참고로 id 속성이 지정된 익명 형식의 세 번째 매개 변수가있는 Html.Hidden 및 Html.Input은 실제로 필요하지 않습니다. 그 기능이 잘못된 id 속성 (대괄호 포함)이있는 HTML 요소를 생성하지 않도록하는 것이 좋습니다.
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Example</title>
</head>
<body>
<div><%
// Get your list of data objects from the model somehow. This will be specific to your model
IEnumerable<MyData> items = Model as IEnumerable<MyData>;
// if there are items
if (items != null)
{
// then iterate over them to create fields inside of a form
using (Html.BeginForm())
{
int itemIndex = 0;
foreach (var item in items)
{ %>
<div>
<%= Html.Hidden("MyData[" + itemIndex + "].MyDataID", item.MyDataID, new { id = "MyData_" + itemIndex + "_MyDataID" })%>
<%= Html.TextBox("MyData[" + itemIndex + "].FirstName", item.FirstName, new { id = "MyData_" + itemIndex + "_FirstName" })%>
<%= Html.TextBox("MyData[" + itemIndex + "].LastName", item.LastName, new { id = "MyData_" + itemIndex + "_LastName" })%>
</div><%
itemIndex++;
}
}
} %>
</div>
</body>
</html>
그런 다음 게시 된 데이터 처리하는 컨트롤러의 액션 메소드 가질 수 있습니다
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Example(IList<MyData> MyData)
{
// the MyData parameter will automatically be populated by the default ModelBinder using the values stored in the form collection (the posted data).
}
이것은 올바른 방향 인 것으로 보입니다. 그러나 나는보기에서 필드를 생성하는 방법을 궁금해. – Fred
jQuery + ajax를 사용하여 양식이 포함 된 div를 업데이트하십시오. –
하는 경우를 기본 모델 바인더 (사용중인 객체에 양식 값을 변환하는 객체 액션 메소드의 매개 변수로 사용하는 것으로 충분하지 않음)을 사용하는 것이 좋습니다. custom model binder
내가 원하는 부분을 알고 있다고 생각합니다. 회사 및 여러 직원을보기에 전달해야 강력한 입력이 가능합니다. 내가 틀렸다면 알려줘.
보기에서 여러 개체가 필요할 때 "ViewModel"클래스를 만듭니다. 나는 보통 별도의 프로젝트에서 도메인 모델 물건을 만든 다음 MVC 프로젝트의 models 폴더를 사용하여 내 ViewModels을 저장합니다.
그래서 지금이
public class SampleViewModel
{
public SampleViewModel() { }
public Company Company { get; set; }
public IEnumerable<Employee> Employees { get; set; }
}
같은 클래스를 생성 샘플보기 모델보기를 결합한다.
public ViewResult SampleAction(SampleViewModel svm)
{
if (svm == null)
svm = new SampleViewModel() { Company=/*getcompany*/, Employees=/*get ienumerable employees */ };
}
이 기술은 내 목적을 잘 수행해 왔습니다. 바라기를 이것은 당신이 찾고 있던 것입니다.
편집 : 귀하의 의견 중 하나를 읽었으며 다른 답변이나 다른 답변에 충분한 담당자가 없어야합니다 (미안하지만, 저는 새로운 것입니다). 보기에서이 필드를 생성하려면 먼저 UI를 회사 필드 (Model.Company)에 바인딩 한 다음 IEnumerable (Model.Employees)을 통해 열거하고 각 UI에 필요한 UI를 모두 작성해야합니다. 나는 ASP.NET MVC에 비교적 익숙하지 않아서 이것이 POST에서 모델 바인딩에 어떤 영향을 주는지 모르겠다. 그러나 매우리스에서는 액션 메소드에서 포스트 값을 반복하고 IEnumerable리스트를 만들 수있다. 다시 ViewModel에 바인드합니다.
보기의 필드 수가 동적 인 경우 X 직원 수를 얻는다면 게시 컬렉션을 반복하여 ViewModel에 바인딩해야합니다. 여기에서 회사 및 직원에게 필요한 모든 작업을 수행하고 도메인 모델에 연결하십시오.
처음으로 양식을로드하는 경우에는 직원을 고용하지 않을 가능성이 높습니다. 목록이 없으므로 UI가로드되지 않습니다. 목록 크기를 확인해야합니다. 0 인 경우 Employee에 바인딩 된 UI 구성 요소 집합을 하나 생성합니다. 그런 다음 필요할 때마다이 UI 세트를 복제하는 다른 직원을 추가하기위한 javascript 단추가있을 것입니다.
분명히 GET과 POST를위한 액션 메소드가 하나 이상있을 것입니다. – Chev
당신은 분명히해야 할 것입니다, 이것은 이해가되지 않습니다. –
그래, 나는이 질문에 대해 다시 한번 언급했다. – Fred