定義済みモデルのリストを編集するビューを作成しようとしています。 したがって、モデルのリストをパラメータとして取得する厳密に型指定されたビューです。 私は個々のモデルを編集するためにカスタムHTMLヘルパーを使います。 Getビューは正しく表示されますが、ポストビューモデル(モデルのリスト)は常にnullです。 私はこのトピックについてここに多くの質問があることを知っていますが、私は今これを2日間行っています。編集ビューでコントローラに返されたモデルは常にnullです
@model IEnumerable<Klever.PrivacyManagerModel>
@using Klever
@{
ViewBag.Title = "ManagePrivacy";
var _privacyTypes = ViewBag.privacyTypes as IEnumerable<PrivacyFlagType>;
}
:これはPrivacyManagerModel
のリストを編集しようとした図である
//GET: /Profile/ManagePrivacy
[Authorize]
public ActionResult ManagePrivacy()
{
PrivacyTypeService _privacyTypeService=new PrivacyTypeService();
IEnumerable<PrivacyFlagType> privacyTypes = _privacyTypeService.GetPrivacyFlagTypes();
List<PrivacyManagerModel> model=new List<PrivacyManagerModel>();
foreach (PrivacyFlagType type in privacyTypes)
{
PrivacyManagerModel temp=new PrivacyManagerModel();
temp.PrivaceTypeId=type.PrivacyFlagTypeId;
model.Add(temp);
}
ViewBag.privacyTypes=privacyTypes;
return View(model);
}
//POST: /Profile/ManagePrivacy
[Authorize]
[HttpPost]
public ActionResult ManagePrivacy(IEnumerable<PrivacyManagerModel> model)
{
if (ModelState.IsValid)
{
do stuff
}
else
{
return View(model);
}
}
:ここ
public class PrivacyManagerModel
{
[Required]
[Display(Name="Privacy Type Id")]
public int PrivaceTypeId { get; set; }
[Required]
[Display(Name = "Visibility Level Id")]
public int VisibilityLevelId { get; set; }
}
は、コントローラのアクションは、次のとおりです。ここで
は、ベースモデルであります@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
@foreach(PrivacyManagerModel item in Model)
{
<div class="display-label">
@Html.DisplayFor(modelItem=>item.PrivaceTypeId)
</div>
<div class="editor-field">
@Html.EditorFor(modelItem=>item)
</div>
}
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
し、最終的にPrivacyManagerModel
のHTMLヘルパーEditTemplate:
@model Klever.PrivacyManagerModel
@using Klever.Components
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<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>
@{
PrivacyTypeService _privacyService = new PrivacyTypeService();
var visibilityLevels=_privacyService.GetVisibilityLevels();
}
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.PrivaceTypeId)
</div>
<div class="editor-field">
@Html.DropDownListFor(model=>model.VisibilityLevelId,new SelectList(visibilityLevels,"VisibilityLevelId","Name"))
@Html.ValidationMessageFor(model => model.VisibilityLevelId)
</div>
</fieldset>
ここでも、GETアクションが正常に動作します(これは、適切図を示している)が、ポストアクションは常にパラメータとしてヌルモデルを受け取ります。 私はあなたの助けに大変感謝します。 ありがとう
私のモデルはIEnumerable <>型で、このモデル "[index]"のような要素にはアクセスできません。 – Martin
あなたのモデルはアレイですか? – Martin
それは今働きます。 IEnumerableの代わりにPrivacyManagerModelの配列を渡すようにコードを変更しました。どうもありがとう!あなたは正しかった – Martin