mvc在控制器和视图之间传递数据

时间:2013-06-18 13:24:42

标签: asp.net-mvc

我正在开发一个应用程序。我创建了一个视图和一个控制器。视图有一个按钮,点击该按钮我应该进行数据库操作。我把数据库操作放在模型中,我在控制器中创建模型的对象。单击该按钮时,操作由控制器中的方法处理,并且创建模型的对象以从数据库获取记录。我想知道是否有任何方法可以在视图中显示这些数据。方法是正确的还是视图应该直接与模型交互以获取数据。 以下是在按钮单击

上调用的控制器中的代码
public ActionResult getRecord()
{
DataModel f_DM = new DataModel();
DataTable f_DT =  f_DM.getRecord();

return View();
}

DataModel是模型类,只有一个方法“getRecord”。 任何帮助将受到高度赞赏。

我想补充说我正在使用vs2010和mvc4

此致

2 个答案:

答案 0 :(得分:1)

您应该编写在控制器中检索数据的逻辑。将所有数据存储在视图模型中并将其传递给视图。

例如。

<强>模型

namespace Mvc4App.Models
{
  public class Product
  {
    public string Name { get; set; }
  }
  public class ProductViewModel
  {
    public Product Product { get; set; }
    public string SalesPerson { get; set; }
  }
}

<强>控制器

public class ProductController : Controller
{
  public ActionResult Info()
  {
    ProductViewModel ProductViewModel = new ProductViewModel
    {
      Product = new Product { Name = "Toy" },
      SalesPerson = "Homer Simpson"
    };
    return View(ProductViewModel);
  }
}

查看

@model Mvc4App.Models.ProductViewModel
@{ ViewBag.Title = "Info"; }
<h2>Product: @Model.Product.Name</h2>
<p>Sold by: @Model.SalesPerson</p>

这是将数据从控制器传递到视图的最着名的做法。

您可以使用其他技术,例如,

1. ViewData 
2. ViewBag 
3. TempData 
4. View Model Object  
5. Strongly-typed View Model Object

答案 1 :(得分:0)

是的,这是可能的,但实际上现在非常符合逻辑。

让我们按照你的方式。你有一些视图如果你有一个按钮,它将触发这个动作。

例如:

public ActionResult Index()
{
return View();
}

在内部视图中,您可以拥有一个Ajax链接,它将触发您的getRecord方法:

<div id="GetDataDiv"></div>
<div>
@Ajax.ActionLink("Get Record", "getRecord", "ControllerName", null, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "GetDataDiv" })
</div> 

在getRecord方法中你应该有:

public ActionResult getRecord()
{
DataModel f_DM = new DataModel();
DataTable f_DT =  f_DM.getRecord();

return PartialView(f_DT);
}

在视图中它应该是:

@model DataTable

@Model.PropertyOne @Model.PropertyTwo

它应该适合你。 实际上这里有同样的例子:http://www.dotnetpools.com/Article/ArticleDetiail/?articleId=151