나는 객체가 있습니다. List<ObjectB>
ObjectB에는 몇 가지 속성이 있습니다. Id
, Mandatory
, Name
등MVC, 부분 부분 모델
그래서 나는 뷰 모델 (ObjectA
)을 반환 내 면도칼이있다 : I는 입력 매개 변수로 시도
@model ObjectA
<div>
<div>@Html.HiddenFor(m => ObjectA.ObjectC.ID)
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => ObjectA.ObjectC.Name)
</dt>
<dd>
@Html.DisplayFor(model => ObjectA.ObjectC.Name)
</dd>
</dl></div>
// display stuff from objectA
@using (Html.BeginForm())
{
foreach (var ft in ObjectA.ObjectB)
{
@Html.HiddenFor(c => ft.ID)
<div class="row">
<div class="col">
@if (ft.Mandatory)
{
@Html.CheckBoxFor(c => ft.Mandatory, new { id = ft.ID, disabled = "disabled" })
@Html.HiddenFor(c => ft.Mandatory)
}
else
{
@Html.CheckBoxFor(c => ft.Mandatory, new { id = ft.ID })
}
</div>
</div>
</div>
</div>
내 컨트롤러에서 : List<ObjectB> items
하지만 null입니다 . 이제 나는 내가 시도한 FormCollection
을 시도 할 수 있다는 것을 알았고 form.Get("ft.id")
에는 objectB 목록에있는 항목의 수가 있다는 것을 알았습니다. 의무적으로 동일합니다. 하지만 강하게 입력하고 싶습니다. 어느 : 유형 B의 모든 유형 objectB의 하위 객체를 IEnumerable
2 목록 /와
1 대상물 (A).
아마도 작은 것이지만 지금은 볼 수 없습니다.
편집 내 모델 :
public class ObjectA : BaseViewModel
{
public ObjectC DisplayOnly { get; internal set; }
public List<ObjectB> Features { get; set; }
}
내보기 : (위 참조) 내 컨트롤러 :
현재 코드[Route("Details/{id:int}")]
[HttpPost]
public ActionResult Details(ObjectA vm)
{
if (ModelState.IsValid)
{
int hid = Convert.ToInt32(RouteData.Values["id"]);
}
}
모델을 'ObjectA'라고 게시하면 Html 레벨에서 눈썹에 대한 이유가 표시되지 않습니다. 어쨌든 HTML 폼에있는 모든 필드 만 보낼 수 있습니다. 따라서 컨트롤러에'List'을 입력으로 삼아서는 안됩니다. –
derloopkat
'ObjectA'의 모든 소품이 표시됩니다. 그리고 ObjectB는 일종의 확장 된 선택 목록입니다. ID, 필수, 이름, 가격, 설명 등입니다. 따라서 objectB의 변경 만 필요합니다. 그러나 모든 것을 가진 완전한 대상 A 역시 괜찮습니다. 그것을 시도하고 null이었다. –