Asp.net mvc 可以使用按钮通过索引视图更新数据吗?

Asp.net mvc 可以使用按钮通过索引视图更新数据吗?,asp.net-mvc,asp.net-mvc-3,model,calendar,Asp.net Mvc,Asp.net Mvc 3,Model,Calendar,我正在将我的思维方式和编程方式从Webforms转换为MVC3。说实话,这伤了我的头 因此,我正在制作一个具有月视图的日历(页面仅显示该月的日期和事件)。我每个月都会按上下两个按钮。在Webforms中,任何更改都只会发生在Calendar.aspx上。然而,似乎我必须做出两个ActionResults(都是HttpPost)。一个转到上一个视图,另一个转到下一个视图。只是为了得到同样的效果。我希望只更新索引ActionResult/视图上的日历,但我不知道该怎么做。我的索引视图如下 长话短说,

我正在将我的思维方式和编程方式从Webforms转换为MVC3。说实话,这伤了我的头

因此,我正在制作一个具有月视图的日历(页面仅显示该月的日期和事件)。我每个月都会按上下两个按钮。在Webforms中,任何更改都只会发生在Calendar.aspx上。然而,似乎我必须做出两个ActionResults(都是HttpPost)。一个转到上一个视图,另一个转到下一个视图。只是为了得到同样的效果。我希望只更新索引ActionResult/视图上的日历,但我不知道该怎么做。我的索引视图如下

长话短说,有没有办法更新日历并返回到索引视图?或者,当我点击相应的按钮(上一个和下一个)时,我是否必须创建另外两个视图(上一个和下一个)来显示新月份

@model htmlmvccendar.Models.MonthModel
@{
ViewBag.Title=“主页”;
整数月份=型号月份;
int year=车型年份;
int numberOfDays=DateTime.DaysInMonth(年,月);
int startDay=(int)(转换为.ToDateTime(月+“/1/”+年).DayOfWeek);
int startCount=1;
}
@查看包。留言

要了解有关ASP.NET MVC的更多信息,请访问。

@{ @转换.ToDateTime(月+“/1/”+年).ToString(“MMMM”); } 太阳 周一 周二 结婚 星期四 星期五 坐 @对于(int i=0;id.CalDate.Day==startCount); foreach(HtmlMVCalendar.Models.CalendarModel事件到今天的事件) { foreach(在eventsToday.CalEvents中的HTMLMVCCalendar.Models.EventModel eventToday事件) { @eventToday.DayCode:
@今日事件。主题:
@eventToday.EventDesc

} } } 如果((j+1)%7==0) { @: } ++startCount; }
更新: 我已经试过了,我觉得应该可以用。不知道为什么没有

    <div>
        @using (Html.BeginForm("Previous", "Home"))
        {
            <input id="previous" type="submit" value="Previous" />
        }
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        @using (Html.BeginForm("Next", "Home"))
        {
            <input id="next" type="submit" value="Next" />
        }
    </div> 


public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    int month;
    int year;

    int.TryParse(ViewBag.Year, out year);
    int.TryParse(ViewBag.Month, out month);
    Calendar monthEventsCal = new Calendar();

    HTMLMVCCalendar.Models.MonthModel allMonthEvents = monthEventsCal.monthEvents(year, month);
    return View("Index", allMonthEvents);            
}

[HttpPost]
public ActionResult Previous(HTMLMVCCalendar.Models.MonthModel prevMonth)
{
    Calendar monthEventsCal = new Calendar();
    var newMonth = monthEventsCal.previousMonth(prevMonth.Year, prevMonth.Month);

    ViewBag.Month = newMonth.Item2;
    ViewBag.Year = newMonth.Item1;
    return RedirectToAction("Index");
}

[HttpPost]
public ActionResult Next(HTMLMVCCalendar.Models.MonthModel nextMonth)
{
    Calendar monthEventsCal = new Calendar();
    var newMonth = monthEventsCal.nextMonth(nextMonth.Year, nextMonth.Month);

    ViewBag.Month = newMonth.Item2;
    ViewBag.Year = newMonth.Item1;
    return RedirectToAction("Index");
}

@使用(Html.BeginForm(“Previous”、“Home”))
{
}
@使用(Html.BeginForm(“下一步”、“主页”))
{
}
公共行动结果索引()
{
ViewBag.Message=“欢迎使用ASP.NET MVC!”;
整月;
国际年;
int.TryParse(ViewBag.Year,out Year);
int.TryParse(ViewBag.MOUNT,out MOUNT);
日历月=新日历();
HTMLMVCalendar.Models.MonthModel allMonthEvents=monthEvents.monthEvents(年、月);
返回视图(“索引”,所有月事件);
}
[HttpPost]
公共行动结果上一个(htmlmvccendar.Models.MonthModel上一个月)
{
日历月=新日历();
var newMonth=上一个月(上一个月.年,上一个月.月);
ViewBag.Month=newMonth.Item2;
ViewBag.Year=newMonth.Item1;
返回操作(“索引”);
}
[HttpPost]
公共行动结果下一步(HTMLMVCCALLER.MODES.MonthModel nextMonth)
{
日历月=新日历();
var newMonth=下一个月的月数(下一个月的年数,下一个月的月数);
ViewBag.Month=newMonth.Item2;
ViewBag.Year=newMonth.Item1;
返回操作(“索引”);
}

有几种方法可以做到这一点,最简单的方法就是执行ajax调用并使用返回的数据更新视图 如果您想获得更多的乐趣,您甚至可以从ajax调用返回一个视图,并替换当前视图,如图所示

有两种方法可以做到这一点,最简单的方法就是执行ajax调用并使用返回的数据更新视图 如果您想获得更多的乐趣,您甚至可以从ajax调用返回一个视图,并替换当前视图,如图所示
建议了可能的方法

public virtual ActionResult Index(int? month)
{
    int relativeMonth = 0;
    if(month.HasValue)
        relativeMonth = month.Value;

    //Create ViewModel fetching calender data using relativeMonth value.
    //For example if relativeMonth is 0 fetch current month view model.
    //If relative month is -3 fetch calendar data from three months ago.

    if(Request..IsAjaxRequest()) //Optional. If you want ajax.
        return PartialView("Calendar", model);

    return View(model);
}
使用此方法,您的“下一个”和“上一个”按钮现在是链接,其中“上一个”将链接到relativeMonth-1,“下一个”是relativeMonth+1。我不认为发布这些帖子是必要的,因为您实际上并没有提交任何表单数据(使用这种方法,我会将下一个和上一个链接的样式设置为按钮)


如果您确实想启用ajax,我会将您的日历视图粘贴在单独的cshtml中,并在index.cshtml中将其称为部分视图。

建议了一种可能的方法

public virtual ActionResult Index(int? month)
{
    int relativeMonth = 0;
    if(month.HasValue)
        relativeMonth = month.Value;

    //Create ViewModel fetching calender data using relativeMonth value.
    //For example if relativeMonth is 0 fetch current month view model.
    //If relative month is -3 fetch calendar data from three months ago.

    if(Request..IsAjaxRequest()) //Optional. If you want ajax.
        return PartialView("Calendar", model);

    return View(model);
}
使用此方法,您的“下一个”和“上一个”按钮现在是链接,其中“上一个”将链接到relativeMonth-1,“下一个”是relativeMonth+1。我不认为发布这些帖子是必要的,因为您实际上并没有提交任何表单数据(使用这种方法,我会将下一个和上一个链接的样式设置为按钮)

如果您确实想启用ajax,我会将您的日历视图放在一个单独的窗口中