如何响应 ASP.NET MVC 应用中需要访问视图内数据的页面上的事件?
How can I respond to events on a page in an ASP.NET MVC app that need to access data within the View?
在我的 ASP.NET MVC 项目中,我需要在用户创建几个 select 离子时动态操作一些 html 元素。我认为这需要在代码隐藏 C# 中完成(而不是在 jquery 中),因为我的响应方式是使用从 SQL 服务器数据库检索的数据,并且是视图的一部分(我不认为 jQuery would/could 知道这个 MVC/.NET 特定的数据)。
具体来说,当用户单击页面上的复选框时,假设 selection 是由 html-select 元素生成的,我的代码需要 spring 以填充页面上的其他元素。
视图 (.cshtml) 正在获取 Razor 代码块中的数据,如下所示:
@model WebAppRptScheduler.Models.HomeModel
@using System.Data
@{
DataTable dtUnitReportPairEmailVals = Model.UnitReportPairEmailVals DataTable;
var unitRptPairEmailVals = from x in dtUnitReportPairEmailVals.AsEnumerable()
select new
{
emailAddr = x.Field<string>("EmailAddr")
};
此数据来自控制器:
DataTable UnitReportPairEmailValsDT = new DataTable();
UnitReportPairEmailValsDT = SQL.ExecuteSQLReturnDataTable(SQL.UnitReportPairEmailQuery, CommandType.Text, null);
model.UnitReportPairEmailVals = UnitReportPairEmailValsDT;
这个(事件处理)代码属于控制器吗?如果是这样,方法declared/decorated如何与它需要监视其事件的html个元素建立联系?
这是需要发生的事情:
- 用户 select 是 html select
的一个选项
- 用户点击复选框
该代码确定了一个选项已被 select 编辑,并且已选中一个复选框;然后它使用数据填充其他控件,如下所示:
@if (unitRptPairEmailVals.Count > 0)
{
email1.Text = unitRptPairEmailVals[0];
}
@if (unitRptPairEmailVals.Count > 1)
{
email2.Text = unitRptPairEmailVals[1];
}
@if (unitRptPairEmailVals.Count > 2)
{
email3.Text = unitRptPairEmailVals[2];
}
以上将填充这些 html 输入的 text/value:
<label class="margin4horizontal">Email 1</label><input type="text" name="email1" id="email1" />
<label class="margin4horizontal">Email 2</label><input type="text" name="email2" id="email2" />
<label class="margin4horizontal">Email 3</label><input type="text" name="email3" id="email3" />
顺便说一句,如果我找错了树,或者甚至完全在错误的森林里,请告诉我首选方法是什么。
更新
在我拼凑出这个问题和相关问题的几个不同答案后,我写了一篇关于如何做到这一点的提示 here。
Update: I was answering on mobile last night, and here is a clearer edit and some sample code...
Asp.net MVC 有控制器,其中包含动作。当您导航到 URL (HTTP GET
) 时,ASP.net 通过路由将其转换为要调用的特定控制器操作,然后该操作的结果将以普通方式发送回浏览器HTML。
此外,当您向特定 URL 提交表单 (HTTP POST
) 时,它会转化为通过路由调用控制器操作。 ModelBinder
将读取该 HTTP POST
的正文并将其转换为您的模型 class。与使用 ViewState
跟踪页面控件、状态和事件的 classic 网络表单不同。
您可以通过两种不同的方式实现您想要实现的目标...
使用 JavaScript
和 JQuery
。您可以向 ASP.net MVC 路由 table 中存在的 URL 发出 Ajax 请求(GET、POST 等)以执行操作,并且结果将返回到您的 JavaScript,而无需导航到另一页。
将 HTML 表单发回服务器将允许 ASP.net MVC 读取 HTML 控件中的 new/changed 值并传递这些值控制器操作的新值,它又可以使用新值和行为再次呈现相同的视图。
在我的 ASP.NET MVC 项目中,我需要在用户创建几个 select 离子时动态操作一些 html 元素。我认为这需要在代码隐藏 C# 中完成(而不是在 jquery 中),因为我的响应方式是使用从 SQL 服务器数据库检索的数据,并且是视图的一部分(我不认为 jQuery would/could 知道这个 MVC/.NET 特定的数据)。
具体来说,当用户单击页面上的复选框时,假设 selection 是由 html-select 元素生成的,我的代码需要 spring 以填充页面上的其他元素。
视图 (.cshtml) 正在获取 Razor 代码块中的数据,如下所示:
@model WebAppRptScheduler.Models.HomeModel
@using System.Data
@{
DataTable dtUnitReportPairEmailVals = Model.UnitReportPairEmailVals DataTable;
var unitRptPairEmailVals = from x in dtUnitReportPairEmailVals.AsEnumerable()
select new
{
emailAddr = x.Field<string>("EmailAddr")
};
此数据来自控制器:
DataTable UnitReportPairEmailValsDT = new DataTable();
UnitReportPairEmailValsDT = SQL.ExecuteSQLReturnDataTable(SQL.UnitReportPairEmailQuery, CommandType.Text, null);
model.UnitReportPairEmailVals = UnitReportPairEmailValsDT;
这个(事件处理)代码属于控制器吗?如果是这样,方法declared/decorated如何与它需要监视其事件的html个元素建立联系?
这是需要发生的事情:
- 用户 select 是 html select 的一个选项
- 用户点击复选框
该代码确定了一个选项已被 select 编辑,并且已选中一个复选框;然后它使用数据填充其他控件,如下所示:
@if (unitRptPairEmailVals.Count > 0) { email1.Text = unitRptPairEmailVals[0]; } @if (unitRptPairEmailVals.Count > 1) { email2.Text = unitRptPairEmailVals[1]; } @if (unitRptPairEmailVals.Count > 2) { email3.Text = unitRptPairEmailVals[2]; }
以上将填充这些 html 输入的 text/value:
<label class="margin4horizontal">Email 1</label><input type="text" name="email1" id="email1" />
<label class="margin4horizontal">Email 2</label><input type="text" name="email2" id="email2" />
<label class="margin4horizontal">Email 3</label><input type="text" name="email3" id="email3" />
顺便说一句,如果我找错了树,或者甚至完全在错误的森林里,请告诉我首选方法是什么。
更新
在我拼凑出这个问题和相关问题的几个不同答案后,我写了一篇关于如何做到这一点的提示 here。
Update: I was answering on mobile last night, and here is a clearer edit and some sample code...
Asp.net MVC 有控制器,其中包含动作。当您导航到 URL (HTTP GET
) 时,ASP.net 通过路由将其转换为要调用的特定控制器操作,然后该操作的结果将以普通方式发送回浏览器HTML。
此外,当您向特定 URL 提交表单 (HTTP POST
) 时,它会转化为通过路由调用控制器操作。 ModelBinder
将读取该 HTTP POST
的正文并将其转换为您的模型 class。与使用 ViewState
跟踪页面控件、状态和事件的 classic 网络表单不同。
您可以通过两种不同的方式实现您想要实现的目标...
使用
JavaScript
和JQuery
。您可以向 ASP.net MVC 路由 table 中存在的 URL 发出 Ajax 请求(GET、POST 等)以执行操作,并且结果将返回到您的 JavaScript,而无需导航到另一页。将 HTML 表单发回服务器将允许 ASP.net MVC 读取 HTML 控件中的 new/changed 值并传递这些值控制器操作的新值,它又可以使用新值和行为再次呈现相同的视图。