MVC将数据从视图传输到操作方法

时间:2012-01-11 17:09:52

标签: asp.net-mvc asp.net-mvc-3

我有一个带有表单的视图,我想要点击一个按钮,同一个视图将从表单的文本框值重新加载新信息。新的信息将在数据库中找到 - 我在控制器中这样做。

所以,我认为我应该从视图中调用一个动作方法。

但是,我读到将数据从视图传输到cantroller是不好的做法,因为MVC的设计特别不适用于此。

有人知道如何设计这个吗?

4 个答案:

答案 0 :(得分:1)

描述

View调用Controller。例如,您可以在视图中放置一个表单并将其发送到表单提交的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);
    }
}

更多信息

答案 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