EF에서 액세스하는 데이터베이스 "컨설턴트"가있는 Asp.Net MVC 3 응용 프로그램이 있습니다. 이제 db의 Consultant 테이블에는 CV 유형 정보 (작업 경험 등)에 대한 여러 테이블과 일대 다 관계가 있습니다. 따라서 사용자는 자신의 이름 등을 한 번 기입 할 수 있어야하지만 여러 가지 "업무 경험"을 추가 할 수 있어야합니다.MVC 3 응용 프로그램에서 모델의 객체 속성보기 생성?
그러나 이러한 외래 키 테이블은 모델의 복잡한 개체이며 Create View를 만들 때 간단한 속성 만 편집기 필드로 가져옵니다. 복잡한 객체를 채울 수 있도록보기 또는 뷰를 설계하려면 어떻게해야합니까? 단순한 속성이 간단한 필드 인 뷰를 내 마음 속에 그린 다음, "직장 경험 추가"를 클릭하고 필요한만큼 많은 것을 추가 할 수있는 일종의 컨트롤을 그림으로 그립니다. 그러나 나는 그것을 어떻게 할 것이고 여전히 모델 바인딩을 활용할 것인가? 사실, 나는 그것에 대해 어떻게 가야할지 모릅니다. (BTW, 프로그램 및 언어는 일반적으로 소프트웨어 경험, 자연 언어 능력, 프로그래밍 언어가 아닌 다른 언어와의 관계에 대해 궁금해 할 때 사용할 수 있습니다.)
대단히 감사합니다.
여기에 기본적으로 추가보기 명령에 의해 생성 된 생성 뷰의 :
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Consultant</legend>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
가 그리고 여기 EF 데이터베이스 다이어그램입니다 :
업데이트 : 제안에 따르면
, Steven Sanderson의 블로그 솔루션을 사용해 보았지만 올바르게 작동하지는 않습니다.
<script type="text/javascript">
var url = '@Url.Action("BlankEditorRow", "Consultant")';
$(document).ready(function() {
$("#addItem").click(function() {
$.ajax({
url: url,
cache: false,
success: function (html) {
alert(html);
$("#editorRows").append(html); }
});
return false;
});
});
</script>
부분보기 : 컨트롤러의
@model Consultants.Models.Program
@using Consultants.Helpers
<div class="editorRow">
@*@using (Html.BeginCollectionItem("programs"))
{*@
@Html.TextBoxFor(model => model.Name)
@*}*@
</div>
및 동작 방법 :
public ActionResult Create()
{
Consultant consultant = new Consultant();
return View(consultant);
}
public ActionResult BlankEditorRow()
{
return PartialView("ProgramEditorRow", new Program());
}
<div id="editorRows">
@foreach (var item in Model.Programs)
{
Html.RenderPartial("ProgramEditorRow", item);
}
</div>
<input type="button" value="Add program" id="addItem" />
는 I는 자바 스크립트가 추가 I의 주요 관점이 추가
나는 Html.BeginC ollectionItem 부분 뷰에서, 내가 그 일을 할 수 없기 때문에. 스티븐 샌더슨이 말한 숨겨진 필드 만 제공합니다. 실제 텍스트 상자는 아닙니다. 그래서 나는 그 부분에 대해 의견을 말하려하고 텍스트 상자를 가지고있었습니다. 글쎄, 그게 날 텍스트 상자를 가져옵니다,하지만 그 방법에 정보를 얻을 수 없습니다. 컨설턴트 개체를 반환 매개 변수로 사용하지만 프로그램 속성에 프로그램이 없습니다. 아마도 이것은 BeginCollectionItem 도우미가 작동하도록 할 수 없다는 사실과 관련이 있습니다. 그러나 어쨌든이를 수행하는 방법을 이해하지 못하거나, 프로그램에서 뷰에 추가 된 프로그램을 얻는 방법을 알지 못합니다. 간단한 개체를 사용하여 post 메서드에 _repository.AddToConsultants (consultant)와 같은 새 개체를 추가하고 EF에 저장할 때 ID를 얻습니다. 그러나 어떻게 프로그램 객체를 가지고 동일한 작업을 수행하고 EF를 통해 데이터베이스에 저장합니까?
이것은 흥미로운 리드처럼 보입니다. 나는 그것을 조사 할 것이다, 고마워! – Anders
좋아, 좋은 링크 였지만, 불행히도 제대로 작동하지 못했습니다. 내 업데이 트를 참조하십시오 ... – Anders
좋아, 적어도 거기 절반 방법이있어, 그래서 여기에 정착하고 새로운 질문을 시작합니다. 감사. – Anders