ASP.NET MVC为下拉列表级联返回500

时间:2017-05-02 05:02:49

标签: asp.net-mvc

我将它用于国家和州的级联下拉列表。当我点击 国家下拉列表,假设显示状态,我得到500服务器错误。请帮帮我

  

单击“国家/地区”下拉列表

时发生错误
        [HttpPost]
    [ValidateAntiForgeryToken] //this is to prevent CSRF attack
    public ActionResult Create(CITIES ci)
    {
        List<COUNTRIES> allCountry = new List<COUNTRIES>();
        List<STATES> allState = new List<STATES>();
        using (AdminEntities dc = new AdminEntities())
        {
            allCountry = dc.COUNTRIES.OrderBy(a => a.COUNTRY_NAME).ToList();
            if (ci != null && ci.COUNTRY_ID > 0)
            {
                allState = dc.STATES.Where(a => a.COUNTRY_ID.Equals(ci.COUNTRY_ID)).OrderBy(a => a.STATE_NAME).ToList();
            }
        }
        ViewBag.COUNTRY_ID = new SelectList(allCountry, "COUNTRY_ID", "COUNTRY_NAME", ci.COUNTRY_ID);
        ViewBag.STATE_ID = new SelectList(allState, "STATE_ID", "STATE_NAME", ci.STATE_ID);


        if (ModelState.IsValid)
        {
            using (AdminEntities dc = new AdminEntities())
            {
                 dc.CITIES.Add(ci);
                 dc.SaveChanges();
                 ModelState.Clear();
                 ci = null;
                 ViewBag.Message = "Successfully Saved";
            }
        }
        else
        {
            ViewBag.Message = "Failed! Please try again";
        }
        return View(ci);
    }

        [HttpGet]
    public JsonResult GetStates(string countryID = "")
    {
       // List<COUNTRIES> allCountry = new List<COUNTRIES>();
        List<STATES> allState = new List<STATES>();
        int ID = 0;
        if (int.TryParse(countryID, out ID))
        {
            using (AdminEntities dc = new AdminEntities())
            {
                allState = dc.STATES.Where(a => a.COUNTRY_ID.Equals(ID)).OrderBy(a => a.STATE_NAME).ToList();
            }
        }
        if (Request.IsAjaxRequest())
        {
            return new JsonResult
            {
                Data = allState,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
            return new JsonResult
            {
                Data = "Not valid request",
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
    }

查看

@model BPP.CCSP.Admin.Web.Models.CITIES

创建

@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<div class="form-horizontal">
    <h4>CITIES</h4>
    <hr />


    @if(ViewBag.message != true)
    {
        <div style="border:solid 1px black">
            @ViewBag.message
        </div>
    }
    <div class="form-group">
        @Html.LabelFor(model => model.COUNTRY_ID, "COUNTRY_ID", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
         @*    @Html.DropDownListFor(model=>model.COUNTRY_ID, new SelectList(string.Empty, "Value", "Text"), "Please select a country", new { @style = "width:250px;" }) *@
            @Html.DropDownListFor(model => model.COUNTRY_ID, @ViewBag.COUNTRY_ID as SelectList,"Select Country") 
            @Html.ValidationMessageFor(model => model.COUNTRY_ID)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.STATE_ID, "STATE_ID", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
         @*    @Html.DropDownListFor(model => model.STATE_ID, new SelectList(string.Empty, "Value", "Text"), "Please select a state", new { @style = "width:250px;" }) *@
           @Html.DropDownListFor(model => model.STATE_ID, @ViewBag.STATE_ID as SelectList, "Select State")  
                @Html.ValidationMessageFor(model => model.STATE_ID)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.CITY_NAME, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.CITY_NAME)
                @Html.ValidationMessageFor(model => model.CITY_NAME)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script language="javascript">
        $(document).ready(function () {
            $("#COUNTRY_ID").change(function () {
                //this will call when country dropdown select change
                var countryID = parseInt($("#COUNTRY_ID").val());
                if (!isNaN(countryID))
                {
                    var ddState = $("#STATE_ID");
                    ddState.empty(); //this line is to clear all items from statee dropdown
                    ddState.append($("<option></option>").val("").html("Select State"));

                    //here i will call controller action via jquery to load state for selected country
                    $.ajax({
                        url: "@Url.Action("GetStates","CITIES")",
                        type: "GET",
                        data: {countryID : countryID},
                        dataType: "json",
                        success: function (data)
                        {
                            $.each(data, function (i, val) {
                                ddState.append(
                                    $("<option></option>").val(val.STATE_ID).html(val.STATE_NAME)
                                    );
                            });
                        }
                        ,
                        error: function ()
                        {
                            alert("Error!");
                        }
                    });

                }
            });
        });
    </script>

}

请该怎么做

1 个答案:

答案 0 :(得分:0)

你可以尝试

吗?
var data = {"countryID" : countryID};
$.ajax({
url: '@Url.Content("~/CITIES/GetStates")',
type: "GET",
contentType: 'application/json',
data:JSON.stringify(data),
});

然后调试GetStates操作,如果你遇到错误,通常会得到500服务器错误