gpt4 book ai didi

asp.net-mvc - @Html.BeginForm() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 12:03:10 24 4
gpt4 key购买 nike

我对 ASP.NET 很陌生,今天刚开始在 asp.net 上学习 MVC 教程。我到了http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view

到目前为止一切顺利,问题是:

在我看来,我有以下代码
(模型使用@model MyFirstMVC4.Models.Movie 设置为 View )

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
<legend>Movie</legend>

@Html.HiddenFor(model => model.ID)

//... bla bla html input
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}

我的电影 Controller
    // Shows the view
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}

//
// POST: /Movie/Edit/5

[HttpPost] // Handles the view above
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}

这是一个问题——它到底是如何将 Movie 对象传递给上面的 POST 方法的?!当我观察客户端时
<form action = "/Movie/Edit/1" ... />

在这里我不明白为什么action = url的同一个 View 页面?!1
同样在服务器端只有 Html.BeginForm() :(
它是如何实现发布什么 Action 方法和传递什么路由参数的?
有效,只是不知道为什么

最佳答案

当您调用 BeginForm()没有任何参数,它默认使用与呈现当前页面相同的 Controller / Action 。它假定您将在 Controller 上使用正确名称的操作来接受回发(您可以这样做)。它使用 RouteValues去做这个。

它会自动将每个输入控件(按名称)绑定(bind)到接受回发的操作的参数 - 或者在您的情况下,绑定(bind)到接受回发的操作的对象参数的属性。

关于asp.net-mvc - @Html.BeginForm() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16744191/

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