MVC:将数据从控制器传递到视图

本文关键字:视图 控制器 数据 MVC | 更新日期: 2023-09-27 18:18:54

如何实现从控制器到视图的数据传递,而不需要对视图进行任何操作

在我的项目中

事件处理程序将在控制器中引发一个事件,该事件将改变MVC中视图的数据。

我一直在寻找答案,我终于知道了应该有一些操作在视图,但我不需要它。EventHandler将引发一个事件,并将数据传递给视图

MVC:将数据从控制器传递到视图

您显然希望在客户机上触发服务器事件,不是吗?

要实现这一点,您需要使用SignalR。你可以在这里找到一篇非常好的文章:

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20-and-mvc-5

在你的控制器:

 public ActionResult getID()
        {
            string qry = "SELECT COUNT(JobID) FROM tblDriverJob";
            IEnumerable<int> data = db.Database.SqlQuery<int>(qry);
            int newFuelID = data.Single() + 1;
            string i = Convert.ToString(newFuelID);

            return new ContentResult { Content = i };
        }

然后在视图

   <div class="form-group ">
        @Html.LabelFor(model => model.JobID, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.JobID, new { htmlAttributes = new { @class = "form-control", @Value = @Html.Action("getID"), @readonly = "readonly" } })
            @Html.ValidationMessageFor(model => model.JobID, "", new { @class = "text-danger" })
        </div>
    </div>

这将填充从我的查询结果。

注意:这将从我的查询返回一个值(count+1以获得新的jobID)。这种设计也可以使用(对下拉列表进行一点"jigging")(我将返回列表到视图)。

通常有两种方式将值从控制器传递到视图

1)你可以存储你的值在ViewBag或在ViewData,这是可取的,当你的值是一个简单的字符串,消息,任何id等,

2)但是如果你的数据是复杂类型的搜索查询结果,那么您应该创建一个模型与属性存储多个值,然后将这个模型传递给视图而返回到视图控制器的行动(i.g.返回(viewname modelObject)),然后你可以访问该模型通过定义模型视图的顶部@ model yourmodelclassname,然后你可以访问该模型的每个属性使用"模型"关键字视图。