0
@Html.ActionLink("Edit", "EditArticle", new { ArticleID = article.ArticleID })

ArticleIDでArticleを取得し、次のように編集ページに戻ります。

public ActionResult EditArticle(Guid ArticleID)
{
    AddArticleModel AddArticleModel = new AddArticleModel();
    AddArticleModel.Categories = entity.TBL_CATEGORIES.Select(a => a);
    AddArticleModel.Article = dbo.SelectArticleById(ArticleID);

    return View(AddArticleModel);
}

ここまで問題ありません。

また、編集ページで、記事の一部の属性(すべての属性ではない)を変更しています。たとえば、タイトル、コンテンツ、更新日を変更しています。このような:

@model DunyaYazilim.Models.AddArticleModel

@{
    ViewBag.Title = "EditArticle";
    Layout = "~/Views/Shared/_LayoutAuthor.cshtml";
}

@using (Html.BeginForm((string)ViewBag.FormAction, "Author"))
{
    @Html.ValidationSummary(true, "Makale gönderilirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.")

    <div>
        <div class="label_header">@Html.Label("Kategori Seçiniz:")</div>
        <div>@Html.DropDownList("CategoryID", new SelectList(Model.Categories, "CategoryID", "Name"),Model.Article.TBL_CATEGORIES.Name)</div>
        <div class="label_header">@Html.Label("Makale Başlık:")</div>
        <div>@Html.TextBoxFor(m => m.Article.Title, new { @class = "my_textbox" })</div>
        <div class="label_header">@Html.Label("Makale Açıklama:")</div>
        <div>@Html.TextAreaFor(m => m.Article.Description, new { @class = "my_textarea" })</div>
        <div class="label_header">@Html.Label("Makale İçerik:")</div>
        <div>@Html.TextAreaFor(m => m.Article.ArticleContent, new { @class = "my_textarea" })</div>
        <div><input type="submit" value="Gönder" class="my_button" /></div>
    </div>
}

そして、私はそれをに投稿します:

[HttpPost]
public ActionResult EditArticle(AddArticleModel AddArticleModel, String CategoryID)
{
    //TODO: update database...
    return View(AddArticleModel);
}

ただし、変更されていない属性はnull(ArticleID、UserIDなど)を返します。投稿後にArticleIDがないため、データベースを更新できません。これの理由は何ですか?

ありがとう。

4

1 に答える 1

2

MVC は、リクエスト間で何も維持しません。アクションに投稿すると、フォームで設定した値のみが投稿されます。フォーム (またはルートやクエリ文字列などの他の場所) に記事 ID またはユーザー ID がないため、EditArticle アクションのモデル バインド中に MVC はそれらについて認識しません。

追加の詳細を投稿とともに送信したい場合は、フォームに非表示のフィールドを配置できます。

@Html.HiddenFor(m => m.Article.Id)
于 2012-04-21T00:53:46.400 に答える