仅对两个“提交”按钮之一进行验证

时间:2016-09-17 13:36:24

标签: c# asp.net asp.net-mvc

我的MVC C#项目中有2个提交按钮。第一个是保存,第二个是保存和发布。单击“保存”时,我不想进行任何验证。但是当点击“保存和发布”时,我想验证并确保填写所有字段。在“保存并发布”时,单击所有字段是必填字段。所以成为MVC C的新手#我想知道最简单的方法是什么,有没有人有任何如何做到这一点的例子?谢谢!

以下是我的视图,其中包含“保存”按钮,然后是“保存并发布”按钮

@using Budget.Models
@model Budget.Models.Budget_Mod.Budget_GrpObj

@{
    ViewBag.Title = "Index";
}

<h2>Prepare Budget</h2>

@using (Html.BeginForm("SaveData", "PrepareBudget", FormMethod.Post))
{

    <table id="budgettable">
        <thead>
            <tr>
                <th style="width: 100px; background-color:#7ac0da">Fund</th>
                <th style="width: 400px; background-color: #7ac0da; ">Function</th>
                <th style="width: 2500px; background-color: #7ac0da; ">Object</th>
                <th style="width: 600px; background-color: #7ac0da; ">Department</th>
                <th style="width: 600px; background-color: #7ac0da; ">Location</th>
                <th style="width: 400px; background-color: #7ac0da; ">Project</th>
                <th style="width: 800px; background-color: #7ac0da; " align="center">@ViewData["prev_yr2_yr"]<br /> Budget</th>
                <th style="width: 800px; background-color: #7ac0da; " align="center">@ViewData["prev_yr1_yr"]<br /> Budget</th>
                <th style="width: 800px; background-color: #7ac0da; " align="center">@ViewData["Curr_yr_yr"]<br /> Actuals</th>
                <th style="width: 800px; background-color: #7ac0da; " align="center">@ViewData["next_yr_yr"]<br /> Proposed Budget</th>
                <th style="width: 1000px; background-color: #7ac0da; ">Nature</th>
                <th style="width: 1000px; background-color: #7ac0da; ">The Need</th>
                <th style="width: 1000px; background-color: #7ac0da; ">Impact If Not Funded</th>
                <th style="width: 1000px; background-color: #7ac0da; ">Aligns to District<br />Strategic Goal</th>
                <th style="width: 1000px; background-color: #7ac0da; ">Aligns to District<br />Priority</th>
                <th style="width: 1000px; background-color: #7ac0da; ">Rationale or <br />Computation</th>
                <th style="width: 500px; background-color: #7ac0da; ">Is this an<br />Investment<br />Request?</th>
                <th style="width: 1000px; background-color: #7ac0da; ">If this is an<br />Investment request,<br />please justify.</th>
                <th style="width: 800px; background-color: #7ac0da; ">Major Object Total</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th style="width:100px"></th>
                <th style="width:400px"></th>
                <th style="width:2500px"></th>
                <th style="width:600px"></th>
                <th style="width:600px"></th>
                <th style="width:400px"></th>
                <th style="width:800px"></th>
                <th style="width:800px"></th>
                <th style="width:800px"></th>
                <th style="width:800px"></th>
                <th style="width:1000px"></th>
                <th style="width:1000px"></th>
                <th style="width:1000px"></th>
                <th style="width:1000px"></th>
                <th style="width:1000px"></th>
                <th style="width:1000px"></th>
                <th style="width:500px"></th>
                <th style="width:1000px"></th>
                <th style="width:800px"></th>
                <th style="width:1000px">Total Budget<br />Requested</th>
            </tr>


            @{
    string prevObject = "0";
    string prevDept = "0";
            }


            @for (var i = 0; i < @Model.budgetList.Count; i++)
            {

                if (@Model.budgetList[i].acct_object_type != prevObject)
                {
                    <tr>
                        <td colspan="3" style="font-weight:bold">@Model.budgetList[i].acct_object_type</td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td></td>
                        <td style="font-weight:bold">@String.Format("{0,14:c}", Model.budgetList[i].major_object_total)</td>
                        @if (@Model.budgetList[i].department != prevDept)
                        {
                            <td style="font-weight:bold">@String.Format("{0,14:c}", Model.budgetList[i].total_budget_requested)</td>
                        }
                    </tr>
                }
                prevObject = Model.budgetList[i].acct_object_type;
                prevDept = Model.budgetList[i].department;
                @Html.HiddenFor(model => model.budgetList[i].version)
                @Html.HiddenFor(model => model.budgetList[i].fy)
                @Html.HiddenFor(model => model.budgetList[i].acct_object_type)
                @Html.HiddenFor(model => model.budgetList[i].created_by)
                @Html.HiddenFor(model => model.budgetList[i].date_created)
                @Html.HiddenFor(model => model.budgetList[i].modified_by)
                @Html.HiddenFor(model => model.budgetList[i].date_modified)
                @Html.HiddenFor(model => model.budgetList[i].major_object_total)
                @Html.HiddenFor(model => model.budgetList[i].total_budget_requested)

                <tr>
                    <td align="left">
                        @Model.budgetList[i].fund
                        @Html.HiddenFor(model => model.budgetList[i].fund)
                    </td>
                    <td align="left">
                        @Model.budgetList[i].acct_function
                        @Html.HiddenFor(model => model.budgetList[i].acct_function)
                    </td>
                    <td style="width:2500px" align="left">
                        @Model.budgetList[i].acct_object
                        @Html.HiddenFor(model => model.budgetList[i].acct_object)
                    </td>
                    <td align="left">
                        @Model.budgetList[i].department
                        @Html.HiddenFor(model => model.budgetList[i].department)
                    </td>
                    <td align="left">
                        @Model.budgetList[i].location
                        @Html.HiddenFor(model => model.budgetList[i].location)
                    </td>
                    <td align="left">
                        @Model.budgetList[i].program
                        @Html.HiddenFor(model => model.budgetList[i].program)
                    </td>
                    <td align="right">
                        @String.Format("{0,14:c}", Model.budgetList[i].prev_yr2_budget)
                        @Html.HiddenFor(model => model.budgetList[i].prev_yr2_budget)
                    </td>
                    <td align="right">
                        @String.Format("{0,14:c}", Model.budgetList[i].prev_yr1_budget)
                        @Html.HiddenFor(model => model.budgetList[i].prev_yr1_budget)
                    </td>
                    <td align="right">
                        @String.Format("{0,14:c}", Model.budgetList[i].curr_yr_actuals)
                        @Html.HiddenFor(model => model.budgetList[i].curr_yr_actuals)
                    </td>

                    @if (Model.budgetList[i].acct_object_type == "10000 Salaries" || Model.budgetList[i].acct_object_type == "20000 Employee Benefits")
                    {
                        <td align="right" style="text-align: right">
                            @String.Format("{0,14:c}", Model.budgetList[i].next_yr_proposed_budget)
                            @Html.HiddenFor(model => model.budgetList[i].next_yr_proposed_budget)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].nature
                            @Html.HiddenFor(model => model.budgetList[i].nature)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].need
                            @Html.HiddenFor(model => model.budgetList[i].need)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].impact_if_not_funded
                            @Html.HiddenFor(model => model.budgetList[i].impact_if_not_funded)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].align_to_district_goal
                            @Html.HiddenFor(model => model.budgetList[i].align_to_district_goal)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].align_to_district_priority
                            @Html.HiddenFor(model => model.budgetList[i].align_to_district_priority)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].rationale
                            @Html.HiddenFor(model => model.budgetList[i].rationale)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].investment_request
                            @Html.HiddenFor(model => model.budgetList[i].investment_request)
                        </td>
                        <td align="left">
                            @Model.budgetList[i].investment_request_justification
                            @Html.HiddenFor(model => model.budgetList[i].investment_request_justification)
                        </td>
                    }
                    else
                    {
                        <td align="right" style="text-align: right">
                            @Html.TextBoxFor(model => model.budgetList[i].next_yr_proposed_budget, "{0:0.00}")
                        </td>
                        <td align="left">
                            @Html.TextAreaFor(model => model.budgetList[i].nature, new { cols = 50, rows = 3 })
                        </td>
                        <td align="left">
                            @Html.TextAreaFor(model => model.budgetList[i].need, new { cols = 50, rows = 3 })
                        </td>
                        <td align="left">
                            @Html.TextAreaFor(model => model.budgetList[i].impact_if_not_funded, new { cols = 50, rows = 3 })
                        </td>
                        <td align="left">
                            @Html.DropDownListFor(model => model.budgetList[i].align_to_district_goal, ViewData["goals"] as SelectList, new { @class = "dropdownSource" })
                            @Html.HiddenFor(model => model.budgetList[i].align_to_district_goal)
                        </td>
                        <td align="left">
                            @Html.DropDownListFor(model => model.budgetList[i].align_to_district_priority, new SelectList(string.Empty, "Value", "Text"), new { @class = "clsColumnNames" })
                            @Html.HiddenFor(model => model.budgetList[i].align_to_district_priority)
                        </td>
                        <td align="left">
                            @Html.TextAreaFor(model => model.budgetList[i].rationale, new { cols = 50, rows = 3 })
                        </td>
                        <td align="left">
                            @Html.EditorFor(model => model.budgetList[i].investment_request)
                        </td>
                        <td align="left">
                            @Html.TextAreaFor(model => model.budgetList[i].investment_request_justification, new { cols = 50, rows = 3 })
                        </td>
                    }
                </tr>
            }
        </tbody>
    </table>

    <p>
        <input type="submit" formnovalidate="formnovalidate" value="Save Data" name="SaveData" id="SaveData" />
    </p>
        <br /><br />

    if (Model.role == "Budget_Role" || Model.role == "Chiefs_Role") 
    {
        <p>
            <input type="submit" value="Save and Post Data" name="SavePost"  id="SavePost"/>
        </p>
    }

    @Html.AntiForgeryToken()
    <p>
        <h3><a href="https://apecsreports.scsk12.org/Secure/">Back to Main Menu</a></h3>
    </p>
}

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="../Scripts/jquery.freezeheader.js"></script>

<script>
    $(document).ready(function () {
        $("#budgettable").freezeHeader();
    })

</script>

<script>
    $("select.dropdownSource").on("change", (function () {

        var columnSelectBox = $(this).parent("td").next("td").find("select.clsColumnNames");

        $.ajax({
            type: 'POST',
            url: '/PrepareBudget/GetPriorities',
            dataType: 'json',
            data: { goals: $(this).find("option:selected").text() },
            success: function (str) {

                $.each(str, function (Value, Text) {
                    columnSelectBox.append('<option value ="' + Text + '">' + Text + '</option>');

                });
            },
            error: function (ex) {
                alert('Failed to retrieve columns.' + ex);
            }
        });
        return false;
    }));
</script>

这是我的控制器

[HttpPost]
public ActionResult SaveData(Budget.Models.Budget_Mod.Budget_GrpObj list, string SaveData, string SavePost)
{
    string verClosed = null;

    if (ModelState.IsValid)
    {
        var session_user = User.Identity.Name;
        if (String.IsNullOrEmpty(session_user))
        {
            session_user = HttpContext.Request.Cookies["username"].Value;
        }
        AuditTrailManager.Add(session_user, "Saving Budget ALL Data","All Data");

        list.user_id = session_user;
        PCN mod = new PCN();

        int month = DateTime.Now.Month;
        if (month > 7)
        {
            list.curryr = DateTime.Now.AddYears(+1).Year.ToString();
        }
        else
        {
            list.curryr = DateTime.Now.Year.ToString();
        }

        if (!string.IsNullOrWhiteSpace(SavePost))
        {
            var BPosted = BudgetListManager.PostData(list);
            list.deptSelect = BudgetListManager.GetByID(list.user_id).ToList();
            mod.fteList = PCNListManager.PostFTEData(list.deptSelect, list.user_id, list.curryr);
            mod.ptList = PCNListManager.PostPTData(list.deptSelect, list.user_id, list.curryr);
            mod.stipendList = PCNListManager.PostSTData(list.deptSelect, list.user_id, list.curryr);
            verClosed = "Y";
        }
        else
        {
            verClosed = "N";
        }

        using (REPORTS_DBEntities context = new REPORTS_DBEntities())
        {
            for (var i = 0; i < list.budgetList.Count; i++)
            { 
                var version = list.budgetList[i].version;
                var fy = list.budgetList[i].fy;
                var fund = list.budgetList[i].fund;
                var acct_function = list.budgetList[i].acct_function;
                var acct_object_type = list.budgetList[i].acct_object_type;
                var acct_object = list.budgetList[i].acct_object;
                var department = list.budgetList[i].department;
                var location = list.budgetList[i].location;
                var program = list.budgetList[i].program;

                var c = context.SCS_BUDGET.Where(a => a.VERSION.Equals(version)).Where(a => a.FY.Equals(fy)).Where(a => a.FUND.Equals(fund)).Where(a => a.ACCT_FUNCTION.Equals(acct_function))
                            .Where(a => a.ACCT_OBJECT_TYPE.Equals(acct_object_type)).Where(a => a.ACCT_OBJECT.Equals(acct_object)).Where(a => a.DEPARTMENT.Equals(department))
                            .Where(a => a.LOCATION.Equals(location)).Where(a => a.PROGRAM.Equals(program)).FirstOrDefault();

                if (c != null)
                {
                    c.NEXT_YR_PROPOSED_BUDGET = decimal.Parse(list.budgetList[i].next_yr_proposed_budget.ToString());
                    c.NATURE = list.budgetList[i].nature;
                    c.NEED = list.budgetList[i].need;
                    c.IMPACT_IF_NOT_FUNDED = list.budgetList[i].impact_if_not_funded;
                    c.ALIGN_TO_DISTRICT_GOAL = list.budgetList[i].align_to_district_goal;
                    c.ALIGN_TO_DISTRICT_PRIORITY = list.budgetList[i].align_to_district_priority;
                    c.RATIONALE = list.budgetList[i].rationale;
                    c.INVESTMENT_REQUEST = list.budgetList[i].investment_request;
                    c.INVESTMENT_REQUEST_JUSTIFICATION = list.budgetList[i].investment_request_justification;
                    c.DATE_MODIFIED = DateTime.Now;
                    c.MODIFIED_BY = session_user;
                    c.VERSION_CLOSED = verClosed;
                }
            }
            context.SaveChanges();
        } 


    System.Data.DataTable dtBudget = new System.Data.DataTable();

    Response.ClearContent();
    Response.Buffer = true;
    string strFName = "BudgetData_" + list.user_id + "_" + DateTime.Now.ToString("MMddyyyyhhmmss") + ".csv";
    Response.AddHeader("content-disposition", "attachment; filename=" + strFName);
    Response.ContentType = "text/csv";
    Response.Charset = "";

    if (!string.IsNullOrWhiteSpace(SavePost))
    {

        System.Data.DataTable dtPCNfte = new System.Data.DataTable();
        System.Data.DataTable dtPCNpt = new System.Data.DataTable();
        System.Data.DataTable dtPCNstipend = new System.Data.DataTable();

        dtBudget = BudgetListManager.ToDataTable<Budget_Mod.Budgets>(list.budgetList);
        dtPCNfte = PCNListManager.ToDataTable<PCN.PCN_FTE>(mod.fteList);
        dtPCNpt = PCNListManager.ToDataTable<PCN.PCN_PT>(mod.ptList);
        dtPCNstipend = PCNListManager.ToDataTable<PCN.PCN_STIPEND>(mod.stipendList);

        Response.WriteFile(BudgetListManager.CreateAllCSV(dtBudget, dtPCNfte, dtPCNpt, dtPCNstipend, strFName));
    }
    else
    {
        dtBudget = BudgetListManager.ToDataTable<Budget_Mod.Budgets>(list.budgetList);
        Response.WriteFile(BudgetListManager.CreateCSV(dtBudget, strFName));
    }

    Response.Flush();
    Response.End();
    } 
    return RedirectToAction("Index");
}

1 个答案:

答案 0 :(得分:0)

您应该在两种情况下都将POST发送到服务器,因为您要保存数据...只需要在“保存并发布”方案中进行验证。

基本上在服务器上,您可以区分单击的按钮。以下是执行此操作的代码:

[HttpPost]
public ActionResult About(AboutModel model, string save)
{
    // your button id/name is save - this value will be initialized only if that button is clicked
    if (!String.IsNullOrEmpty(save))
    {
        // just save
    }
    else
    {
        // save and post... you can check for ModelState.IsValid like:
        if (ModelState.IsValid)
        {

        }
        else
        {
            // invalid model
        }
    }

    return View();
}

以下是cshtml形式的样子,以便您了解正在做什么:

@model AboutModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Test Form</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.Label("Name", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input id="save" name="save"
                       type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input @* no id/name *@
                       type="submit" value="Save and Post" class="btn btn-default" />
            </div>
        </div>
    </div>
}