我有一个带有表单的视图,我想要点击一个按钮,同一个视图将从表单的文本框值重新加载新信息。新的信息将在数据库中找到 - 我在控制器中这样做。
所以,我认为我应该从视图中调用一个动作方法。
但是,我读到将数据从视图传输到cantroller是不好的做法,因为MVC的设计特别不适用于此。
有人知道如何设计这个吗?
答案 0 :(得分:1)
View
调用Controller
。例如,您可以在视图中放置一个表单并将其发送到表单提交的ActionMethod。
<强>模型强>
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);
}
}
答案 1 :(得分:0)
您究竟在哪里读到将数据从视图传输到控制器的不良做法?您需要将某些信息传输到操作,以表示要提取的数据。
在您的方案中,您可以使用路由值来传递ID:
@Html.ActionLink("Get Latest", "GetLatest", new { Id = Model.Id })
视图模型的当前视图项具有Id
属性。
答案 2 :(得分:0)
按钮单击应该表现为处理输入的Controller Action的HTTP POST。控制器将处理输入,从数据库中获取适当的信息并返回将填充此新数据的视图。
视图应引用控制器操作以确定HTTP POST的地址,但本身并不将数据传递给控制器。
请记住,按钮点击不是由“视图”处理的 - 它只是呈现HTML的模板 - 而是由客户端浏览器处理。
答案 3 :(得分:0)
除了已经说过的内容之外,为了重新加载相同的视图,您可以考虑使用MVC提供的ajax功能。然后你不必真正重新加载整个页面,而只需要重新加载页面上的元素。可以找到一个非常基本的例子here