MVC将数据从视图转移到操作方法



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

所以,我认为我应该从这个角度调用一个操作方法。

但是,我读到将数据从视图传输到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功能。然后,您将不必真正重新加载整个页面,而只需重新加载页面上的一个元素。一个非常基本的例子可以在这里找到

最新更新