3

添付ファイルを編集するためのページを作成しようとしています。

アタッチメント モデル:

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に入力されていません...(他のすべてが入力されています)

何か案は?私は何を間違っていますか?

どうもありがとう!!!

4

1 に答える 1

0

リストを繰り返し処理し、各値を入力すると、次のようになります。

@foreach (JSONI18NTextModel item in model) 
{
    Html.EditorFor(i => item.Titles, "EditLabels");
    Html.EditorFor(i => item.Descriptions, "EditLabels");
}

次に、コントローラーアクションに1つのモデルのみを投稿していると仮定します。

[HttpPost]
public ActionResult Edit(JSONI18NTextModel model)
{
    // The only Model you are posting should be accessible here.
}

ページにモデルのリストがある場合は、Details一度に1つのモデルにのみアクセスし、そのモデルのみをコントローラーに投稿するビューを作成することをお勧めします。

于 2012-11-26T11:32:53.467 に答える