2012-04-21 174 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); 
} 

沒有問題,直到這裏。

而在我的編輯頁面中,我正在更改文章的某些屬性(並非所有屬性)。例如,我正在更改標題,內容和更新日期。就像這樣:

@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,用戶名等)。所以我不能更新數據庫,因爲我沒有條款ArticleID張貼後。這是什麼原因?

謝謝。

+0

既然我們沒有你的html/cshtml的代碼,那麼很難確定哪些值返回到你的'EditArticle'方法。 – 2012-04-21 00:42:58

+0

我更新了帖子,並添加了編輯頁面。 – 2012-04-21 00:47:48

回答

2

MVC在請求之間不會爲您維護任何內容。當您發佈到您的動作時,它只會發佈您在表單中設置的值。由於您的表單(或任何其他地方,例如路由或查詢字符串)中沒有文章ID或用戶標識,因此在您的EditArticle操作的模型綁定期間,MVC將不會了解它們。

如果您希望通過您的文章發送額外的詳細信息,您可以將隱藏的字段放在表單中,例如,

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

當我這樣做和調試項目時,EditArticle(AddArticleModel AddArticleModel,String CategoryID)方法不會觸發。 – 2012-04-21 00:58:35

+0

我也使用這個:@ Html.HiddenFor(m => m.Article.IsActive)「IsActive」是布爾值。可能會導致此錯誤? – 2012-04-21 01:00:47

+0

在添加HiddenFor之前是否發射?生成的HTML是什麼樣的?關於IsActive,除非它實際上是可編輯的,否則我不打擾它。只需發回ID,即可調出正在編輯的實體以及實際正在編輯的數據。然後將實體從存儲中取出,更新必填字段並將其保存回去。 – ngm 2012-04-21 01:10:54