mvc html中 变量显示,通过硬编码html设置c#mvc会话变量select

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(string message in Model.Messages) {

@message

}

@foreach(int item in Model.AvailableThresholds) {

@item

}

默认的MVC ModelBinder很聪明。它通过ModelMetaDataProvider使用反射遍历方法中的参数,并尝试从HTTP请求中根据名称匹配来查找字段(这就是为什么具有名称的表单字段很重要)。它可以做更复杂的事情,一个int或一个字符串。

这里有一些资源:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值