0

複数の編集ページを作りたい。しかし、ループTextBoxFor()で , TextAreaFor(),を使用する方法がわかりません。ValidationMessageFor()foreach

@foreach (var note in Model.noteList)
{
    using(Html.BeginForm()){
        @Html.Hidden("id", note.id);
        <div class="userIdArea"><b>@note.userId</b></div>  
        <div class="noteArea">@note.content</div>  
        <br />
        <div class="editor-label">
            @Html.LabelFor(model => model.note.userId)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.note.userId, new { @Value = note.userId })
            @Html.ValidationMessageFor(model => model.note.userId)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(note => note.noteList)
            @Html.ValidationMessageFor(model => model.note.content)
        </div>
        <input type="submit" value="Edit" />
    }
}

上記のコードは textarea の値を設定できません。これは正しい方法ではないと思います。

編集 )

私はこのようにコードを変更しました、

@foreach (var note in Model.noteList)
{
    using(Html.BeginForm()){
        @Html.Hidden("note.id", note.id);
        <div class="userIdArea"><b>@note.userId</b></div>  
        <div class="noteArea">@note.content</div>  
        <br />
        <div class="editor-label">
            @Html.LabelFor(model => model.note.userId)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => note.userId)
            @Html.ValidationMessageFor(model => note.userId)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(model => note.content)
            @Html.ValidationMessageFor(_ => note.content)
        </div>
        <input type="submit" value="Edit" />
    }
}

ValidationMessageFor() の使用にはまだ問題があります。

1つのコンテンツのみを空にしてフォームを送信すると、次のようになります。

ここに画像の説明を入力

ValidationMessage を適切な場所に配置するにはどうすればよいですか?

[編集#2]

はい、同じビューでもフォームを作成しました。

ビューコードは次のようになります。

@model MemoBoard.Models.NoteViewModel

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Note</h2>
<br /><br />
@using(Html.BeginForm()){
    <div class="editor-label">
        @Html.LabelFor(model => model.note.userId)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.note.userId)
        @Html.ValidationMessageFor(model => model.note.userId)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.note.content)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.note.content, new { rows = 4})
        @Html.ValidationMessageFor(model => model.note.content)
    </div>
    <input type="submit" value ="Save" />
} @* //End create form *@ 

<!-- List Area -->

@foreach (var note in Model.noteList)
{
    using(Html.BeginForm()){
        @Html.Hidden("note.id", note.id);
        @Html.EditorForModel()
        <div class="userIdArea"><b>@note.userId</b></div>  
        <div class="noteArea">@note.content</div>  
        <br />
        <div class="editor-label">
            @Html.LabelFor(model => model.note.userId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => note.userId, new { id = "A"})
            @Html.ValidationMessageFor(model => note.userId)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(model => note.content)
            @Html.ValidationMessageFor(model => note.content)
        </div>
        <input type="submit" value="Edit" />
    }
}

と、

モデル、

public class Note
{
    [Key]
    public int id { get; set; }

    [Required(ErrorMessage="Content is required")]
    [DisplayName("Note")]
    public string content { get; set; }
    public DateTime date { get; set; }

    [Required(ErrorMessage = "User ID is required")]
    [DisplayName("User ID")]
    public string userId {get; set;}
    public Boolean isPrivate { get; set; }
    public virtual ICollection<AttachedFile> AttachedFiles { get; set; }

}

ビューモデル、

public class NoteViewModel
{
    public IEnumerable<Note> noteList { get; set; }
    public Note note { get; set; }
}

コントローラ、

public ActionResult Index()
{
    var notes = unitOfWork.NoteRepository.GetNotes();
    return View(new NoteViewModel(){noteList=notes.ToList(), note = new Note()});
}

[HttpPost]
public ActionResult Index(Note note)
{
    try
    {
    if (ModelState.IsValid)
    {
        unitOfWork.NoteRepository.InsertNote(note);
        unitOfWork.Save();
        return RedirectToAction("Index");
    }
    }catch(DataException){
    ModelState.AddModelError("", "Unable to save changes. Try again please");
    }

    var notes = unitOfWork.NoteRepository.GetNotes();
    return View(new NoteViewModel() { noteList = notes.ToList(), note = new Note() });
}
4

2 に答える 2

3

必要に応じて実際にこれを行うことができます(を使用する必要はありませんmodel):

@Html.LabelFor(model => note.userId)
@Html.ValidationMessageFor(model => note.userId)
@Html.ValidationMessageFor(model => note.content)

ラムダ変数名を に変更して、 が重要_ではないことを示すことがmodelあります (必要に応じて省略可能です)。

@Html.LabelFor(_ => note.userId)
@Html.ValidationMessageFor(_ => note.userId)
@Html.ValidationMessageFor(_ => note.content)
于 2012-10-25T20:43:54.067 に答える
0

for each ステートメントで "note" var を反復処理しているため、html ヘルパーはモデルではなくその "note" var を参照します。解決策は次のとおりです。

@foreach (var note in Model.noteList)
{
    using(Html.BeginForm()){
        @Html.Hidden("id", note.id);
        <div class="userIdArea"><b>@note.userId</b></div>  
        <div class="noteArea">@note.content</div>  
        <br />
        <div class="editor-label">
            @Html.LabelFor(note => note.userId)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(note => note.userId, new { @Value = note.userId })
            @Html.ValidationMessageFor(note => note.userId)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(note => note.noteList)
            @Html.ValidationMessageFor(note => note.content)
        </div>
        <input type="submit" value="Edit" />
    }
}
于 2012-10-25T20:54:01.327 に答える