添付ファイルを編集するためのページを作成しようとしています。
アタッチメント モデル:
public class Attachment
{
...
private IList<JSONI18NText> titles = new List<JSONI18NText>();
private IList<JSONI18NText> descriptions= new List<JSONI18NText>();
...
public virtual IList<JSONI18NText> Titles
{
get { return titles; }
set { this.titles = value; }
}
public virtual IList<JSONI18NText> Descriptions
{
get { return descriptions; }
set { this.descriptions= value; }
}
JSONI18NText モデル:
public class JSONI18NText
{
public int LanguageId { get; set; }
public string Text { get; set; }
}
添付ビューモデル:
public class AttachmentModel
{
public AttachmentModel() { }
public AttachmentModel(Attachment at) {
...
this.Titles = new List<JSONI18NTextModel>();
this.Descriptions = new List<JSONI18NTextModel>();
foreach (JSONI18NText title in at.Titles)
{
this.Titles.Add(new JSONI18NTextModel(title, "Title"));
}
foreach (JSONI18NText description in at.Descriptions)
{
this.Descriptions.Add(new JSONI18NTextModel(description, "Description"));
}
}
[Display(Name = "Title", Description = "Title of the file")]
public IList<JSONI18NTextModel> Titles { get; set; }
[Display(Name = "Description", Description = "Description of the attachment file")]
[DataType(DataType.MultilineText)]
public IList<JSONI18NTextModel> Descriptions { get; set; }
JSONI18NText ビューモデル:
public class JSONI18NTextModel
{
public JSONI18NTextModel() { }
public JSONI18NTextModel(JSONI18NText jsonI18nText)
{
this.LanguageId = jsonI18nText.LanguageId;
this.Text = jsonI18nText.Text;
}
[HiddenInput(DisplayValue = false)]
public int LanguageId { get; set; }
public string Text { get; set; }
}
今、私が達成しようとしているのは、言語のタブ付きリストを備えた編集フォームです。たとえば、英語用とイタリア語用の 2 つのタブがあります。各タブをクリックすると、タイトルと説明の入力値が読み取られますその特定の言語。
すべてが魅力的に機能します。リスト用と JSONI18NTextModel 用の 2 つの部分ビューを持つビュー スクリプトを使用しました。
Edit.cshtml:
...
@Html.EditorFor(model => model.Titles, "EditLabels")
@Html.EditorFor(model => model.Descriptions, "EditLabels")
...
EditLabels.cshtml:
@model List<CR2.Web.Areas.Admin.Models.JSONI18NTextModel>
@using CR2.Web.Infrastructure
@using CR2.Web.Areas.Admin.Models
@if(Model.Count() == 1)
{
@Html.EditorFor(model => model[0], "EditLabel");
}
else
{
for(int i = 0; i < Model.Count(); ++i)
{
<div>
<ul>
@Html.EditorFor(model => model[i], "EditLabel")
</ul>
</div>
}
}
EditLabel.cshtml:
@model CR2.Web.Areas.Admin.Models.JSONI18NTextModel
@using CR2.Web.Infrastructure
<li>
@Html.HiddenFor(model => model.LanguageId)
<div>
@Html.LabelWithTooltip(model => model.Text)
</div>
<div>
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
</li>
レンダリングすると、「Titles.[0].Text」のような名前のフィールドが作成されます。これは完璧だと思います...
フォームを送信すると問題が発生します:「タイトル」と「説明」がAttachmentModelに入力されていません...(他のすべてが入力されています)
何か案は?私は何を間違っていますか?
どうもありがとう!!!