我有一个带有表单的视图,我想在单击按钮时,用表单文本框值中的新信息重新加载同一视图。新的信息将在数据库中找到——我在控制器中这样做。
所以,我认为我应该从这个角度调用一个操作方法。
但是,我读到将数据从视图传输到cantroller是一种糟糕的做法,因为MVC是专门为这一点而设计的。
有人知道如何设计这个吗?
描述
CCD_ 1由CCD_ 2调用。例如,您可以在视图中放置一个表单,并在表单提交时将其发送到ActionMethod。
这些都是ASP.NET MVC的基本原理,你应该学习一下
样品
型号
public class ViewModel
{
public string SomeProperty { get; set; }
}
查看
@model MvcApplication2.Models.ViewModel;
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.SomeProperty)
<input type="submit" />
}
具有ActionMethods的控制器
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new ViewModel());
}
[HttpPost]
public ActionResult Index(ViewModel model)
{
// do something with your model
// load from something from database for example
return View(model);
}
}
更多信息
- ASP.NET MVC
您从哪里了解到将数据从视图传输到控制器是一种糟糕的做法?您需要将一些信息传输到操作,以表示要获取的数据。
在您的场景中,您可以使用路由值来传递id:
@Html.ActionLink("Get Latest", "GetLatest", new { Id = Model.Id })
其中,视图模型具有当前视图项的Id
属性。
按钮点击应显示为处理输入的控制器操作的HTTPPOST。控制器将处理输入,从数据库中获取适当的信息,并返回将用这些新数据填充的视图。
为了确定HTTPPOST的地址,视图应该引用控制器操作,但它本身并不将数据传递给控制器。
请记住,按钮点击不是由"视图"处理的,"视图"只是渲染HTML的模板,而是由客户端浏览器处理的。
除了前面所说的,为了重新加载相同的视图,您可能会考虑使用MVC提供的ajax功能。然后,您将不必真正重新加载整个页面,而只需重新加载页面上的一个元素。一个非常基本的例子可以在这里找到