2012-04-21 156 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