gpt4 book ai didi

c# - 如何将隐藏字段值从 View 传递到 Controller ASP.NET MVC 5?

转载 作者:太空狗 更新时间:2023-10-29 21:26:39 25 4
gpt4 key购买 nike

我正在尝试通过执行以下操作将隐藏字段值从 View 传递到 Controller

@Html.HiddenFor(model => model.Articles.ArticleId) 

也尝试过

<input type="hidden" id="ArticleId" name="ArticleId" value="@Model.Articles.ArticleId" />

在这两种情况下,ArticleId 的值都是 0,但是当我使用 TextboxFor 时,我可以看到正确的 ArticleId,请帮忙

这里是

查看

@model ArticlesCommentsViewModel
....
@using (Html.BeginForm("Create", "Comments", FormMethod.Post))
{
<div class="row">
<div class="col-xs-10 col-md-10 col-sm-10">
<div class="form-group">
@Html.LabelFor(model => model.Comments.Comment, new { @class = "control-label" })
@Html.TextAreaFor(m => m.Comments.Comment, new { @class = "ckeditor" })
@Html.ValidationMessageFor(m => m.Comments.Comment, null, new { @class = "text-danger"})
</div>
</div>
</div>

<div class="row">

@*@Html.HiddenFor(model => model.Articles.ArticleId)*@
<input type="hidden" id="ArticleId" name="ArticleId" value="@Model.Articles.ArticleId" />
</div>

<div class="row">
<div class="col-xs-4 col-md-4 col-sm-4">
<div class="form-group">
<input type="submit" value="Post Comment" class="btn btn-primary" />
</div>
</div>
</div>
}

Controller

    // POST: Comments/Create
[HttpPost]
public ActionResult Create(CommentsViewModel comments)//, int ArticleId)
{
var comment = new Comments
{
Comment = Server.HtmlEncode(comments.Comment),
ArticleId = comments.ArticleId,
CommentByUserId = User.Identity.GetUserId()
};
}

模型

public class CommentsViewModel
{
[Required(ErrorMessage = "Comment is required")]
[DataType(DataType.MultilineText)]
[Display(Name = "Comment")]
[AllowHtml]
public string Comment { get; set; }

public int ArticleId { get; set; }
}

View 模型

public class ArticlesCommentsViewModel
{
public Articles Articles { get; set; }
public CommentsViewModel Comments { get; set; }
}

最佳答案

View 中的模型是 ArticlesCommentsViewModel,因此您的 POST 方法中的参数必须匹配。您对

的使用
@Html.HiddenFor(model => model.Articles.ArticleId)

是正确的,但是你需要把方法改成

[HttpPost]
public ActionResult Create(ArticlesCommentsViewModel model)

模型将被正确绑定(bind)。

作为旁注,您的 ArticlesCommentsViewModel 不应包含数据模型,而应仅包含您在 View 中需要的那些属性。如果 typeof Articles 包含具有验证属性的属性,则 ModelState 将无效,因为您没有发布 Article 的所有属性。

但是,由于 CommentsViewModel 已经包含 ArticleId 的属性,因此您可以只使用

@Html.HiddenFor(model => model.Comments.ArticleId)

在 POST 方法中

[HttpPost]
public ActionResult Create([Bind(Prefix="Comments")]CommentsViewModel model)

有效去除“评论”前缀

关于c# - 如何将隐藏字段值从 View 传递到 Controller ASP.NET MVC 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39405527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com