发送选择下拉列表会以mvc ajax形式创建错误500

时间:2017-05-16 18:34:05

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

模型:

public class FranqueadoModel
{
    [DisplayName("Nome")]
    [Required(ErrorMessage = "Por favor, digite seu nome!")]
    [RegularExpression(@"^[^\s][a-zA-ZáéíóúÁÉÍÓÚàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛãõñÃÕÑäëïöüÄËÏÖÜçÇ\'\s]{3,}$", ErrorMessage = "Digite um nome válido!")]
    public string Nome { get; set; }


    [DisplayName("E-mail")]
    [Required(ErrorMessage = "Por favor, digite seu email!")]
    [EmailAddress(ErrorMessage = "Digite um email válido!")]
    public string Email { get; set; }


    [DisplayName("Telefone")]
    [DataType(DataType.PhoneNumber)]
    [Required(ErrorMessage = "Por favor, digite seu número de telefone!")]
    [RegularExpression(@"^\+?([0-9\s\-]{1,5})?(\(\d{2,5}\))?([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$" /* https://pastebin.com/Su8M9PRY */, ErrorMessage = "Digite um número válido!")]
    public string Telefone { get; set; }


    [DisplayName("Capital disponível")]
    [Required(ErrorMessage = "Por favor, selecione o capital disponível!")]
    public IEnumerable<SelectListItem> Capital { get; set; }


    [DisplayName("Origem")]
    [Required(ErrorMessage = "Por favor, selecione a origem!")]
    public IEnumerable<SelectListItem> Origem { get; set; }
}

控制器:

    public ActionResult Index()
    {
        var Capital = new List<SelectListItem>
            {
                new SelectListItem {Text = "de R$80.000 até R$100.000", Value = "1"},
                new SelectListItem {Text = "de 101.000 até R$150.000", Value = "2"},
                new SelectListItem {Text = "de R$151.000 até R$200.000", Value = "3"},
                new SelectListItem {Text = "de R$201.000 até R$250.000", Value = "4"},
                new SelectListItem {Text = "acima de R$250.000", Value = "5"},

        };

        var Origem = new List<SelectListItem>
            {
                new SelectListItem {Text = "Contatos Site", Value = "1"},
                new SelectListItem {Text = "Direto Quiosque", Value = "2"},
                new SelectListItem {Text = "Email Direto", Value = "3"},
                new SelectListItem {Text = "Encontre Sua Franquia", Value = "4"},
                new SelectListItem {Text = "Facebook", Value = "5"},
                new SelectListItem {Text = "Formulário Site", Value = "6"},
                new SelectListItem {Text = "Indicação", Value = "7"},
                new SelectListItem {Text = "Sua Franquia", Value = "8"},
                new SelectListItem {Text = "Telefone", Value = "9"},

        };

        ViewBag.Capital = new SelectList(Capital, "Value", "Text", Capital);
        ViewBag.Origem = new SelectList(Origem, "Value", "Text", Origem);


        return View();
    }

    [HttpPost]
    public ActionResult Enviar(FranqueadoModel franqueado)
    {
        try
        {
           ...

            return Content("E-mail enviado com sucesso.");
        }
        catch (Exception e)
        {
            return Content("Não foi possivel enviar o e-mail.");

        }

    }

索引表:

@using (Ajax.BeginForm("Enviar", "Franqueado", new AjaxOptions { UpdateTargetId = "dvResult", HttpMethod = "Post", OnFailure = "sendFail", OnSuccess = "sendSuccess", OnBegin = "sendBegin", OnComplete = "sendComplete" }, new { @class = "contact-form", id = "frm-contato" }))
{
    @Html.AntiForgeryToken()

    <div class="form-group">
        <div class="control-label col-sm-2">
            @Html.LabelFor(x => x.Nome)
        </div>
        <div class="col-sm-10">
            @Html.EditorFor(x => x.Nome, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(x => x.Nome, "", new { @class = "txt-failure" })
        </div>
    </div>

    <div class="form-group">
        <div class="control-label col-sm-2">
            @Html.LabelFor(x => x.Email)
        </div>
        <div class="col-sm-10">
            @Html.EditorFor(x => x.Email, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(x => x.Email, "", new { @class = "txt-failure" })
        </div>
    </div>

    <div class="form-group">
        <div class="control-label col-sm-2">
            @Html.LabelFor(x => x.Telefone)
        </div>
        <div class="col-sm-10">
            @Html.EditorFor(x => x.Telefone, new { htmlAttributes = new { @class = "form-control telefone" } })
            @Html.ValidationMessageFor(x => x.Telefone, "", new { @class = "txt-failure" })
        </div>
    </div>



    <div class="form-group">
        <div class="control-label col-sm-2">
            @Html.LabelFor(x => x.Capital)
        </div>
        <div class="col-sm-10">
            @Html.DropDownListFor(model => model.Capital, (IEnumerable<SelectListItem>)ViewBag.Capital, "-- Selecione --", new { @class = "form-control" })
            @Html.ValidationMessageFor(x => x.Capital, "", new { @class = "txt-failure" })
        </div>
    </div>


    <div class="form-group">
        <div class="control-label col-sm-2">
            @Html.LabelFor(x => x.Origem)
        </div>
        <div class="col-sm-10">
            @Html.DropDownListFor(model => model.Origem, (IEnumerable<SelectListItem>)ViewBag.Origem, "-- Selecione --", new { @class = "form-control" })
            @Html.ValidationMessageFor(x => x.Origem, "", new { @class = "txt-failure" })
        </div>
    </div>

    <div class="form-group">
        <div class="control-label col-sm-2"></div>
        <div class="col-sm-10">
            <input id="form_botcheck" name="form_botcheck" class="form-control" type="hidden" value="">
            <button class="thm-btn2" type="submit">Enviar Mensagem</button>
        </div>
    </div>

    <div class="row">
        <div class="col-sm-2"></div>
        <div class="col-sm-10" style="padding: 23px;">
            <div><h2 id="dvResult"></h2></div>
            <div style="display: none" class="loading_message"><h2><i class="ld ld-ring ld-spin" style="animation-duration:1.56s; font-size:26px;"></i> Enviando mensagem<span id="loading-dots"></span></h2></div>
        </div>
    </div>

}

问题是,当我从三个文档中删除CapitalOrigem类型的IEnumerable对象时,一切都很完美,但是当我尝试发送时与他们的形式,我得到这个错误:

enter image description here

那么,我该怎样做才能在mvc中以ajax形式的下拉列表中发送所选项目的值?

2 个答案:

答案 0 :(得分:0)

我发现了如何解决它。我以为我必须检查控制器内的所选项目,但表格已经发送了所选项目,所以我所要做的就是改变

public IEnumerable<SelectListItem> Capital { get; set; }
public IEnumerable<SelectListItem> Origem { get; set; }

public string Capital { get; set; }
public string Origem { get; set; }

答案 1 :(得分:0)

在模型中添加

public string CurrentCapital {get;组; }

public string CurrentOrigem {get;组; }

然后在视图中使用

@ Html.DropDownListFor(model =&gt; model.CurrentCapital ,(IEnumerable)ViewBag.Capital,“ - Selecione - ”,new {@class = “形式控制”})

@ Html.DropDownListFor(model =&gt; model.CurrentOrigem ,(IEnumerable)ViewBag.Origem,“ - Selecione - ”,new {@class = “形式控制”})