概述
MVC并不一定在网页形式意义上具有“事件”(尽管您可以使用它们),但通常不建议。 MVC对应于用于从服务器发送/接收数据的HTTP模型。当你想与服务器交互时,你的控制器类需要额外的操作方法。
您的控制器可以通过多种方式接受来自客户端的输入,但其中最基本的是通过为MVC将尝试绑定到请求数据(表单,查询字符串等)的操作方法指定参数。这里有一个例子控制器:
//Controller class
public class ReportController : Controller {
public ActionResult Index() {
ActionResult result = null;
ReportSelectionViewModel viewModel = this.BuildViewModel();
result = View("Index", viewModel);
return result;
} // end action Index
[HttpPost()]
public ActionResult ChangeReport(ChangeReportRequest changeRequest) {
ActionResult result = null;
ReportSelectionViewModel viewModel = this.BuildViewModel();
Session["ReportOptions"] = changeRequest;
viewModel.Messages.Add("Selection was changed.");
viewModel.ReportRequest = changeRequest;
result = View("Index", viewModel);
return result;
} // end action ChangeReport
//Method that encapsulates the logic needed to build a view model for actions on this controller
protected ReportSelectionViewModel BuildViewModel() {
ReportSelectionViewModel viewModel = null;
viewModel = new ReportSelectionViewModel();
viewModel.AvailableThresholds.AddRange(new int[] { 1, 2, 3, 4 });
//Set the value to whatever the user previously selected if available
if (Session["ReportOptions"] != null) {
viewModel.ReportRequest.ThresholdSelect = ((ChangeReportRequest)Session["ReportOptions"]).ThresholdSelect;
} // end if
return viewModel;
} // end function BuildViewModel
} // end class ReportController
在上面的控制器,默认Index()动作不接受任何参数,因为它不需要任何的首次访问。 ChangeReport()操作接受称为模型的类型为ChangeReportRequest的参数。这告诉MVC,这个动作是EXPERVTING来自客户端的一个值(或一系列值),并导致MVC深入挖掘以找出客户端提供哪些值以实现控制器的参数参数并返回完全填充模型对象。
下面是该模型类的样子:
//Model class that gets built by the DefaultModelBinder
public class ChangeReportRequest {
private int _reportId;
private int _thresholdSelect;
public ChangeReportRequest() {
_reportId = 1; // Meaningful default value here
_thresholdSelect = 0;
} // end constructor
public int ReportId {
get {
return _reportId;
} set {
_reportId = value;
}
} // end property ReportId
public int ThresholdSelect {
get {
return _thresholdSelect;
} set {
_thresholdSelect = value;
}
} // end property ThresholdSelect
} // end class ChangeReportRequest
这也是一个不错的主意,有不同类型的模型(一个ViewModel)是用于显示目的专门用于(从一个不同正常模式,其目的是保存交易数据)。ViewModels在您的视图中添加编译时支持,以便可以在视图中显示这些内容。一个例子ViewModel如下所示:
//Strongly typed view model class passed to the view to add intellisense support in the view and avoid the ViewBag.
using System.Collections.Generic;
public class ReportSelectionViewModel {
private List _availableThresholds;
private List _messages;
private ChangeReportRequest _reportRequest;
public ReportSelectionViewModel() {
_availableThresholds = new List();
_messages = new List();
_reportRequest = new ChangeReportRequest();
} // end constructor
public List AvailableThresholds {
get {
return _availableThresholds;
}
} // end property AvailableThresholds
public List Messages {
get {
return _messages;
}
} // end property Messages
public ChangeReportRequest ReportRequest {
get {
return _reportRequest;
} set {
if (value != null) {
_reportRequest = value;
} // end if
}
} // end property ReportRequest
} // end class ReportSelectionViewModel
MVC有内置模型绑定将尝试映射表单字段的输入值上控制器操作的方法。通过命名控制器方法参数与您的选择列表(你必须给你的选择列表中的名称,除了它的ID),你可以简单地建立在你的选择列表中的AA形式包装:
这里是视图将与上述代码一起使用:
@model ReportSelectionViewModel
Index
@foreach(int item in Model.AvailableThresholds) {
@item
}
默认的MVC ModelBinder很聪明。它通过ModelMetaDataProvider使用反射遍历方法中的参数,并尝试从HTTP请求中根据名称匹配来查找字段(这就是为什么具有名称的表单字段很重要)。它可以做更复杂的事情,一个int或一个字符串。
这里有一些资源:
最后
以上就是哭泣豌豆为你收集整理的mvc html中 变量显示,通过硬编码html设置c#mvc会话变量select的全部内容,希望文章能够帮你解决mvc html中 变量显示,通过硬编码html设置c#mvc会话变量select所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复