2012-04-21 26 views
0
@Html.ActionLink("Edit", "EditArticle", new { ArticleID = article.ArticleID }) 

私は情報でarticleIDによって記事を検索し、このようにページを編集するために戻る:ASP.NET MVC編集操作ですか?

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); 
} 

何の問題がここまでありません。

私の編集ページでは、記事の属性(すべての属性ではない)を変更しています。たとえば、title、content、およびupdateddateを変更しています。

@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); 
} 

しかし、私は情報でarticleIDを持っていけないのでそのままの属性が、私はデータベースを更新傾ける。だからリターンヌル(情報でarticleID、ユーザーIDなど)です。このような投稿後。これの理由は何ですか?

ありがとうございました。

+0

私たちはあなたのhtml/cshtmlのコードを持っていないので、どの値があなたの 'EditArticle'メソッドに返ってくるのか判断するのは難しいでしょう。 –

+0

私はpost.Andを更新し、編集ページを追加しました。 –

答えて

2

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

あなたの投稿で追加の詳細を送信したい場合は、フォームに隠しフィールドを入れることができます。

@Html.HiddenFor(m => m.Article.Id) 
+0

これを実行してプロジェクトをデバッグすると、EditArticle(AddArticleModel AddArticleModel、String CategoryID)メソッドが起動しません。 –

+0

また、これも使用します:@ Html.HiddenFor(m => m.Article.IsActive) "IsActive"はブール値です。このエラーが発生する可能性がありますか? –

+0

HiddenForを追加する前に発砲しましたか?生成されたHTMLの外観はどうですか? IsActiveに関して、実際に編集可能でない限り、私はそれを気にしません。どのエンティティが編集中であるかを呼び出すためにIDをポストバックし、実際に編集中のデータをポストバックするだけです。エンティティをストレージから取り出し、必要なフィールドを更新して元に戻します。 – ngm

関連する問題