public class MainRegisterViewModel
{
public RegisterViewModel RegisterModel { get; set; }
public RegisterFormValuesViewModel RegisterValues { get; set; }
}
RegisterFormValuesViewModel
이 컨트롤에 대한 모든 값을 포함 내가보기를 사용하고 모델 (같은 국가, 주 목록과 물건)과 RegisterViewModel
입니다 사용자에 대한 정보를 포함합니다.
그런 다음이 컨트롤을로드합니다.
@model ProjetX.Models.MainRegisterViewModel
@{
IEnumerable<SelectListItem> countries = Model.RegisterValues.Countries.Select(x => new SelectListItem()
{
Text = x.Country,
Value = x.Id.ToString()
});
IEnumerable<SelectListItem> states = Model.RegisterValues.States.Select(x => new SelectListItem()
{
Text = x.State,
Value = x.Id.ToString()
});
}
<div class="container">
<div class="row">
<div class="col-md-12">
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
....
<div class="form-group">
@Html.LabelFor(m => m.RegisterModel.Country, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.RegisterModel.Country, countries, new { @class = "form-control" })
</div>
</div>
....
또한 레지스터 함수는 MainRegisterViewModel
을 매개 변수로 사용합니다.
문제
내가 양식을 제출하면,RegisterFormValuesViewModel
이
NULL
입니다.
왜 그런가?
는상황에 감사
내가 API에서 RegisterFormValuesViewModel
를로드하기 때문에 나는이 일을하고있어 내가 한 번만 전화를 시도하고있다. 문제는 사용자가 오류가있는 양식을 POST하고 다시보기를 반환 할 때 API를 다시 호출하여 RegisterFormValuesViewModel
을 가져와야하는 경우였습니다.
전에는 RegisterFormValuesViewModel
에 대한 하나의 모델 및 뷰백 이었지만 뷰백이 게시되지 않았기 때문에 양식이로드 될 때마다 API를 호출해야했습니다. 그래서 2 개의 모델을 사용하고 POST를 할 수 있다고 생각했습니다.
오해의 여지가 있지만'RegisterFormValuesViewModel'의 값이 POST에 없으면 모델이 다시 채워지지 않습니다. 예를 들어'states' 드롭 다운 목록의 선택된 값은 요청에 포함되지만 목록을 작성하는 데 사용되는 항목은 요청에 포함되지 않습니다. –
값을 게시하는 간단한 방법이 있습니까? – Marc
조의 대답은 몇 가지 옵션을 제공합니다. 숨겨진 필드가 가장 쉽지만 거대한 요청 (예 : webforms viewstate)을 작성하지 않도록하고 싶습니다. 자주 변경되지 않는 주/국가와 같은 경우에는 대신 캐시에 넣을 수 있습니다. –