gpt4 book ai didi

c# - ASP.NET MVC : Ignore field(s) when editing

转载 作者:太空狗 更新时间:2023-10-30 00:32:46 25 4
gpt4 key购买 nike

在学习ASP.NET MVC的过程中,遇到了一个问题,遇到了一些麻烦

我正在尝试创建一个简单的博客,只是为了测试我到目前为止学到的东西。但是当涉及到编辑和离开字段时,我遇到了问题。

我正在尝试编辑博客上已提交的帖子,该帖子包含几个字段:Id、标题、消息、作者和提交日期,不应编辑,保持原样。

这是一些代码:

我的帖子模型:

namespace MyBlock.Models
{
public class Post
{
public int Id { get; set; }

[Required]
public string Author { get; set; }

[Required]
public string Headline { get; set; }

[Required]
public string Message { get; set; }

public DateTime Date { get; set; }
}
}

我的编辑:

[HttpGet]
public ActionResult Edit(int id = 0)
{
Post post = db.Posts.Find(id);

if (post != null) {
return View(post);
}

return HttpNotFound();
}

[HttpPost]
public ActionResult Edit(Post post)
{
if (ModelState.IsValid) {
db.Entry(post).State = EntityState.Modified;
db.SaveChanges();

return RedirectToAction("Index", "Home");
}

return View(post);
}

我的编辑观点:

@model MyBlock.Models.Post

@{
ViewBag.Title = "Edit";
}

<h2>Rediger "@Model.Headline"</h2>

@using (Html.BeginForm()) {
@Html.LabelFor(u => u.Author)
@Html.TextBoxFor(u => u.Author)

@Html.LabelFor(u => u.Headline)
@Html.TextBoxFor(u => u.Headline)

@Html.LabelFor(u => u.Message)
@Html.TextAreaFor(u => u.Message)

<input type="submit" value="Gem" />
}

我知道我可以输入 @HiddenFor(u => u.Date) 并提交相同的日期。但我敢打赌,除了将其作为源代码中的隐藏字段之外,还有另一种方法吗?我的意思是在另一个例子中这不是那么安全吗?所以我想要这里隐藏字段以外的东西。你们能帮帮我吗?

如果我尝试按原样运行它。我收到一个错误,这是我的日期未设置,这是合乎逻辑的,因为它也想更新那个日期。但我不想这样。如果您可以这样说,我想将其保留为可选。

最佳答案

不要拿陌生人的糖果

换句话说,不要从客户端获取信息并直接更新数据库。您应该在服务器端执行您的业务规则,而不是相信客户端会为您做这件事。

[HttpPost]
public ActionResult Edit(Post post)
{
if (ModelState.IsValid) {
var dbPost = db.Posts.FirstOrDefault(p => p.Id == post.Id);
if (dbPost == null)
{
return HttpNotFound();
}

dbPost.Author = post.Author;
dbPost.Message = post.Message;
dbPost.Headline = post.Headline;
db.SaveChanges();

return RedirectToAction("Index", "Home");
}

return View(post);
}

[HttpPost]
public ActionResult Add(Post post)
{
if (ModelState.IsValid) {
var dbPost = db.Create<Post>();
dbPost.Author = post.Author;
dbPost.Message = post.Message;
dbPost.Headline = post.Headline;
dbPost.Date = DateTime.Now(); // Don't trust client to send current date
db.SaveChanges();

return RedirectToAction("Index", "Home");
}

return View(post);
}

在我自己的项目中,我通过将自定义验证规则添加到 ValidateEntity 方法来在域层强制执行这样的规则。

关于c# - ASP.NET MVC : Ignore field(s) when editing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603132/

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