在jQuery中执行c#代码
我有一个返回日期列表的模型函数。在我看来,我不想将类似的代码复制到jQuery中以填充下拉列表在jQuery中执行c#代码,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我有一个返回日期列表的模型函数。在我看来,我不想将类似的代码复制到jQuery中以填充下拉列表 <script src="/Bootstrap_Sufee/assets/js/vendor/jquery-2.1.4.min.js"></script> <script type="text/javascript">$(document).ready(function() { $("#attendanceReportType").change(functi
<script src="/Bootstrap_Sufee/assets/js/vendor/jquery-2.1.4.min.js"></script>
<script type="text/javascript">$(document).ready(function() {
$("#attendanceReportType").change(function() {
if ($("#attendanceReportType").val() == "Class Monthly") {
$("#attendanceReportYear").empty();
$("#attendanceReportYear").append("<option>May 2018</option>");
$("#attendanceReportYear").append("<option>April 2018</option>");
$("#attendanceReportYear").append("<option>March 2018</option>");
});
});</script>
jQuery能否执行它在C#中的模型函数并存储日期列表
public List<string> GetAvailableDateInStrings()
{
List<string> dateList = new List<string>();
foreach(Year year in this.m_years)
{
foreach(Month month in year.GetMonths())
{
string monthString = month.MonthInEnum.ToString() + " " + year.CalendarYear.ToString();
if(year.CalendarYear == this.m_cutOffYear && month.MonthInYear <= this.m_cutOffMonth)
{
dateList.Add(monthString);
}
else if(year.CalendarYear < this.m_cutOffYear)
{
dateList.Add(monthString);
}
}
}
return dateList;
}
public List GetAvailableDateInStrings()
{
列表日期列表=新列表();
foreach(本年中的年份。m_年)
{
foreach(年中的月。GetMonths())
{
字符串monthString=month.MonthInEnum.ToString()+“”+year.CalendarYear.ToString();
如果(year.CalendarYear==this.m_cutOffYear&&month.MonthInYear解决此问题的最佳方法是使用ajax
public JsonResult GetAvailableDateInStrings()
{
List<string> dateList = new List<string>();
foreach (Year year in this.m_years)
{
foreach (Month month in year.GetMonths())
{
string monthString = month.MonthInEnum.ToString() + " " + year.CalendarYear.ToString();
if (year.CalendarYear == this.m_cutOffYear && month.MonthInYear <= this.m_cutOffMonth)
{
dateList.Add(monthString);
}
else if (year.CalendarYear < this.m_cutOffYear)
{
dateList.Add(monthString);
}
}
}
return Json(dateList);
}
public JsonResult GetAvailableDateInStrings()
{
列表日期列表=新列表();
foreach(本年中的年份。m_年)
{
foreach(年中的月。GetMonths())
{
字符串monthString=month.MonthInEnum.ToString()+“”+year.CalendarYear.ToString();
如果(year.CalendarYear==this.m_cutOffYear&&month.MonthInYearAjax是可能的,正如另一个答案告诉您的。但是有一个更简单的解决方案:使用ViewBag
在视图中生成所需的代码
在控制器操作中
ViewBag.MyDateList = myListOfDates;
在您看来
$("#attendanceReportType").change(function() {
if ($("#attendanceReportType").val() == "Class Monthly") {
$("#attendanceReportYear").empty();
@foreach (var myDate in ViewBag.MyDateList)
{
$("#attendanceReportYear").append("<option>@myDate.ToString("MMMM yyyy")</option>");
}
}
});
$(“#attendanceReportType”).change(函数(){
if($(“#attendanceReportType”).val()=“班级每月”){
$(“#AttendenceReportYear”).empty();
@foreach(ViewBag.MyDateList中的变量myDate)
{
$(“#attendenceeportyear”)。追加(@myDate.ToString(“MMMM-yyyy”);
}
}
});
这将生成所需的jQuery代码,而无需您自己复制/粘贴它。只需执行一个操作,返回GetAvailableDateInStrings函数的JsonResult。然后让jQuery调用该操作并遍历它返回的Json集合,以填充您的选择。“jQuery能否执行它在C#中的模型函数”…如果你通过一个动作方法公开它,那么是的。这种事情就是AJAX的用途。C#函数必须是一个控制器动作?事实上我对web开发还不熟悉,我非常感谢你的回答。)@KWCham。是的,应该是。如果您在任何其他类中有此方法,那么您应该在控制器中创建任何其他方法,这些方法将通过Ajax调用。哦,c#代码可以直接在jQuery中执行?我是web开发新手,非常感谢您的回答。:)@KWCham:不是直接在jQuery中。相反,视图是使用Razor构建的,Razor会为您生成网页。生成的页面会发送到浏览器,浏览器会在页面上执行Javascript/jQuery(可能包括您在Razor中生成的特定脚本)。您可以使用@foreach
之类的东西来影响Razor的生成过程,这意味着您可以迭代生成部分网页内容。这可以是HTML、javascript、jQuery等等,其实并不重要。请将Razor视为高级网页HTML字符串。格式变体,因为它本质上就是这样做的。@KWCham:Ju需要明确的是:控制器执行该操作。然后控制器告诉Razor呈现一个视图。Razor呈现该视图,实际上只是创建网页的HTML(字符串).MVC将该字符串发送到发送web请求的浏览器。浏览器随后相应地呈现页面,并在页面上执行任何JavaScript。Razor在web服务上运行;jQuery在客户端浏览器中运行。从字面意义上讲,一个不在另一个中运行。它们甚至不在同一台机器上运行(服务器与用户的计算机)在这种情况下,如果我理解正确,上面的jQuery代码在客户端执行,当它到达c#code时,它向服务器发出另一个请求以执行c#code,然后服务器将结果发送回jQuery发送请求的位置?@KWCham每个新请求都会创建一个新的网页,该网页由它自己运行。因此,是的,jQuery可以导致web请求uest返回一个新页面,jQuery将在该页面上执行,但它将不再是以前的页面。有更复杂的方法解决这个问题,但这超出了问题的范围。我建议看一本MVC教程,因为这是MVC操作的核心