可以通过数据的索引视图使用按钮进行更新? [英] Can data be updated through the Index View using buttons?

查看:111
本文介绍了可以通过数据的索引视图使用按钮进行更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我转换了我的思想和编程方式从Web表单到MVC3。为了记录在案,它伤害了我的头。

所以我提出一个具有月视图(页面只显示天,事件的一个月)的日历。我把两个按钮previous和下一步转到逐月。在Web表单,任何改变只会发生在Calendar.aspx。然而,它的看起来,我将必须进行两次ActionResults(均为HttpPost)。一个人去一个previous视图,再下一个视图。只是为了获得相同的效果。我希望只更新索引的ActionResult /查看日历,但我看不出如何做到这一点。我的索引视图如下。

所以长话短说,有没有办法来更新日历和返回索引视图?还是我必须做出另外两个视图(previous和Next),以显示新的一个月的时候,我打的相应按钮(previous和Next)?

  @model HTMLMVCCalendar.Models.MonthModel@ {
    ViewBag.Title =主页;
    INT月= Model.Month;
    年整型= Model.Year;
    INT NUMBEROFDAYS = DateTime.DaysInMonth(年,月);
    INT朝九特派=(INT)(Convert.ToDateTime(月+/ 1 /+年).DayOfWeek);
    INT startCount = 1;
}< H2> @ ViewBag.Message< / H>
&所述p为H.;
    要了解更多关于ASP.NET MVC的访问&LT; A HREF =htt​​p://asp.net/mvc称号=ASP.NET MVC网站&GT; HTTP://asp.net/mvc< / a取代。
&所述; / P&GT;
&LT; D​​IV&GT;
    &LT;表ID =日历&GT;
        &LT;&THEAD GT;
            &所述; TR&GT;
                百分位的id =monthHeader列跨度=7&GT;
                    &LT; H3&GT;
                    @ {
                        @ Convert.ToDateTime(月+/ 1 /+年)的ToString(MMMM);
                    }
                    &LT; / H3 GT&;
                &LT; /第i
            &LT; / TR&GT;
            &所述; TR&GT;
                &LT;第i个太阳和LT; /第i
                &LT;第i个星期一及LT; /第i
                &LT;第i周二&LT; /第i
                &LT;第i个星期三&LT; /第i
                &LT;第i个星期四&LT; /第i
                &LT;第i周五&LT; /第i
                &LT;第i个星期六及LT; /第i
            &LT; / TR&GT;
        &LT; / THEAD&GT;
        &LT;&TBODY GT;
            &所述; TR&GT;
            @for(INT I = 0; I&LT;朝九特派++ I)
            {
                @:<td><div><span>&nbsp;</span></div><div><span>&nbsp;</span></div></td>
            }
            @for(中间体J =朝九特派; J&≤((NUMBEROFDAYS +朝九特派)+1); ++ j)条
            {
                &所述; TD&GT;
                    &LT; D​​IV&GT;&LT;跨度&GT; @ startCount&LT; / SPAN&GT;&LT; / DIV&GT;
                    &LT; D​​IV&GT;
                        &LT;跨度&GT;
                            @ {
                                VAR todaysEvents = Model.AllDays.ToList()的FindAll(D =&GT; d.CalDate.Day == startCount)。
                                的foreach(HTMLMVCCalendar.Models.CalendarModel eventsToday在todaysEvents)
                                {
                                    的foreach(HTMLMVCCalendar.Models.EventModel eventToday在eventsToday.CalEvents)
                                    {
                                        &LT;文字和GT;
                                            &安培; NBSP; @ eventToday.Day code:&LT; BR /&GT;
                                            &安培; NBSP; @ eventToday.Subject:LT; BR /&GT;
                                            &安培; NBSP; @ eventToday.EventDesc&LT; BR /&GT;&LT; BR /&GT;
                                        &LT; /文字和GT;
                                    }
                                }
                            }
                        &LT; / SPAN&GT;
                    &LT; / DIV&GT;
                &LT; / TD&GT;
                            如果(第(j + 1)%7 == 0)
                            {
                    @:或其可/ TR&GT;&下; TR&GT;
                }
                ++ startCount;
            }
            &LT; / TR&GT;
        &LT; / TBODY&GT;
    &LT; /表&gt;
    &LT; D​​IV&GT;
        &LT;输入ID =previous类型=提交值=提交/&GT;
        &安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;
        &LT;输入ID =下一步类型=提交值=提交/&GT;
    &LT; / DIV&GT;
&LT; / DIV&GT;

更新:
我已经试过这一点,我认为它应该工作。不知道为什么它没有?

 &LT; D​​IV&GT;
        @using(Html.BeginForm(previous,家))
        {
            &LT;输入ID =previous类型=提交值=previous/&GT;
        }
        &安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;&安培; NBSP;
        @using(Html.BeginForm(下一步,家))
        {
            &LT;输入ID =下一步类型=提交值=下一步/&GT;
        }
    &LT; / DIV&GT;
公众的ActionResult指数()
{
    ViewBag.Message =欢迎使用ASP.NET MVC!;    INT月;
    INT年;    int.TryParse(ViewBag.Year,出年);
    int.TryParse(ViewBag.Month,出月);
    日历monthEventsCal =新的日历();    HTMLMVCCalendar.Models.MonthModel allMonthEvents = monthEventsCal.monthEvents(年,月);
    返回视图(指数,allMonthEvents);
}[HttpPost]
公众的ActionResult previous(HTMLMVCCalendar.Models.MonthModel prevMonth)
{
    日历monthEventsCal =新的日历();
    。VAR newMonth = monthEventsCal previousMonth(prevMonth.Year,prevMonth.Month);    ViewBag.Month = newMonth.Item2;
    ViewBag.Year = newMonth.Item1;
    返回RedirectToAction(「指数」);
}[HttpPost]
公众的ActionResult下一页(HTMLMVCCalendar.Models.MonthModel nextMonth)
{
    日历monthEventsCal =新的日历();
    VAR newMonth = monthEventsCal.nextMonth(nextMonth.Year,nextMonth.Month);    ViewBag.Month = newMonth.Item2;
    ViewBag.Year = newMonth.Item1;
    返回RedirectToAction(「指数」);
}


解决方案

建议去做潜在方法

 公共虚拟的ActionResult指数(INT?月)
{
    INT relativeMonth = 0;
    如果(month.HasValue)
        relativeMonth = month.Value;    //创建视图模型提取使用relativeMonth价值日历数。
    //例如,如果relativeMonth为0取当月视图模型。
    //如果对应月份为-3三个月前获取日历数据。    如果(Request..IsAjaxRequest())//可选。如果你想阿贾克斯。
        返回PartialView(日历,模型);    返回查看(模型);
}

使用这种方法你的下一个和和previous按钮现在是链接到何处previous将链接到relativeMonth - 1,其次是relativeMonth + 1。我不认为让他们的职位是必要的,因为你实际上没有提交(用这个方法我会做类似样式的按钮旁边和previous链接)任何形式的数据。

如果你想支持AJAX,我会坚持你的日历视图在一个单独的CSHTML并把它作为index.cshtml的局部视图。

I am converting my way of thinking and programming from Webforms to MVC3. For the record, it hurts my head.

So I am making a calendar that has a month view (page only shows the days and events for that month). I'm putting two buttons Previous and Next to go from month to month. In Webforms, any change would just happen on Calendar.aspx. However, it seems that I'll have to make two ActionResults (both HttpPost). One goes to a Previous view and another to a Next view. Just to get the same effect. I was hoping to just update the calendar on the Index ActionResult/View but I don't see how to do that. My Index view is below.

So long story short, is there a way to update the Calendar and return to the Index view? Or do I have to make two other Views (Previous and Next) to show the new month when I hit the corresponding buttons (Previous and Next)?

@model HTMLMVCCalendar.Models.MonthModel

@{
    ViewBag.Title = "Home Page";
    int month = Model.Month;
    int year = Model.Year;
    int numberOfDays = DateTime.DaysInMonth(year, month);
    int startDay = (int)(Convert.ToDateTime(month + "/1/" + year).DayOfWeek);
    int startCount = 1;
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
<div>  
    <table id="calendar">
        <thead>
            <tr>
                <th id="monthHeader" colspan="7">
                    <h3>
                    @{
                        @Convert.ToDateTime(month + "/1/" + year).ToString("MMMM");
                    }
                    </h3>
                </th>
            </tr>
            <tr>
                <th>Sun</th>
                <th>Mon</th>
                <th>Tues</th>
                <th>Wed</th>
                <th>Thur</th>
                <th>Fri</th>
                <th>Sat</th>
            </tr>
        </thead>
        <tbody>
            <tr>
            @for (int i = 0; i < startDay; ++i)
            {
                @:<td><div><span>&nbsp;</span></div><div><span>&nbsp;</span></div></td>
            }
            @for (int j = startDay; j < ((numberOfDays + startDay) + 1); ++j)
            {
                <td>
                    <div><span>@startCount</span></div>
                    <div>
                        <span>
                            @{
                                var todaysEvents = Model.AllDays.ToList().FindAll(d => d.CalDate.Day == startCount);
                                foreach(HTMLMVCCalendar.Models.CalendarModel eventsToday in todaysEvents)
                                {
                                    foreach(HTMLMVCCalendar.Models.EventModel eventToday in eventsToday.CalEvents)
                                    {
                                        <text>
                                            &nbsp;@eventToday.DayCode:<br />
                                            &nbsp;@eventToday.Subject:<br />
                                            &nbsp;@eventToday.EventDesc<br /><br />
                                        </text>
                                    }                                 
                                }
                            }
                        </span>
                    </div>
                </td>
                            if ((j + 1) % 7 == 0)
                            {
                    @:</tr><tr>
                }
                ++startCount;
            }
            </tr>
        </tbody>
    </table>
    <div>
        <input id="previous" type="submit" value="submit" />
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <input id="next" type="submit" value="submit" />
    </div> 
</div>

UPDATE: I've tried this and I think it should work. Not sure why it didn't?

    <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");
}

解决方案

Suggested potential way to do it

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);
}

Using this method your next and and previous buttons are now links where Previous will link to relativeMonth - 1 and next is relativeMonth + 1. I don't think making them posts is necessary since you're not actually submitting any form data (using this method I'd make next and previous links styled like buttons).

If you do want to enable ajax, I'd stick your calendar view in a seperate cshtml and call it as a partial view in index.cshtml.

这篇关于可以通过数据的索引视图使用按钮进行更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆