【问题标题】:MVC - Remote validation for the blur eventMVC - 模糊事件的远程验证
【发布时间】:2015-03-23 17:44:41
【问题描述】:

我正在尝试通过在文本框失去焦点时读取后端数据库来验证输入网页的代码是否有效。我能够在控制器中执行代码,但由于某种原因模型对象没有被传递给控制器​​方法。

文本框定义...

<div class="form-group">
    @Html.LabelFor(m => m.HSDRepCode)
    @Html.TextBoxFor(m => m.HSDRepCode, new { placeholder = "Enter your HSD Rep code...", @class = "contact-name"})
    @Html.ValidationMessageFor(m => m.HSDRepCode)
</div>

模糊事件的 javascript 代码...

<script type="text/javascript">
    $("#HSDRepCode").blur(function () {
        var model = '@Html.Raw(Json.Encode(Model))';

        $.ajax({
            url: "/CRM/ValidateHSDRep",
            type: "POST",
            data: $("model").serialize(),
            dataType: "application/json"
            }).done(function( model ) {
                $("#HSFirstName").val(model.HSFirstName);
                $("#HSLastName").val(model.HSLastName);
                });
        });
    </script>

CRM 控制器代码...

public ActionResult ValidateHSDRep(LeadInfo leadInfo)
    {
        HSDRep hsdRep = new HSDRep();

        hsdRep = CRMModels.ValidateHSDRepCode(leadInfo.HSDRepCode);

        return Json(leadInfo);
    }

控制器代码被执行,但是在输入HSDRepCode并跳到下一个文本框后leadInfo对象全部为空。

为什么没有将模型传递给控制器​​代码?

谢谢, 加里

【问题讨论】:

  • 当您只需要一个属性时,为什么还要发回整个模型?但是,如果您确实想降低性能,那么使用data: $('form').serialize(), 回发控件中的值。
  • 我要返回整个模型,因为我想返回两个附加值。如果有更好的方法,我想知道它是什么。谢谢
  • 只发回你需要的东西——data: $(this).val(),,只返回你需要的东西——return Json(new {firstName = leadInfo.HSFirstName ,lastName: leadInfo.HSFirstName }, JsonRequestBehavior.AllowGet)——性能要好得多。 (它是 GET,而不是 POST)

标签: javascript asp.net-mvc validation unobtrusive-validation


【解决方案1】:

模型变量没有 serialize() 方法,该方法仅用于表单元素。 尝试从此行中删除单引号: var model = @Html.Raw(Json.Encode(Model)); 现在将模型对象作为数据发送:模型。

    <script type="text/javascript">
$("#HSDRepCode").blur(function () {
    var model = @Html.Raw(Json.Encode(Model));

    if(model == null) {
        model = {};
    }

    model.HSDRepCode = $(this).val();

    $.ajax({
        url: "/CRM/ValidateHSDRep",
        type: "POST",
        data: model,
        dataType: "application/json"
    }).done(function (model) {
        $("#HSFirstName").val(model.HSFirstName);
        $("#HSLastName").val(model.HSLastName);
    });
});
</script>

【讨论】:

  • 谢谢。我删除了 'var model' 行并将数据行设置为 'data: model' 并收到一条错误消息,指出“model”未定义。
  • 对不起,我不清楚,不要删除该行,只删除单引号,我编辑我的答案。
  • 我添加了 var model = @Html.Raw(Json.Encode(Model));回来,没有单引号并将数据行更改为数据:模型,但我在模型中没有任何数据。每个属性都是空的。
  • 您的模型是否也具有空属性?因为如果您执行@Html.Raw(Json.Encode(Model)),属性将处于初始状态,即您发送到视图的状态,它不会在您输入输入时动态更新。如果要发送字段中的值,请在之前设置 model.HSDRepCode = $(this).val()。其他属性也将为空,因此您需要在 AJAX 之前填充它们。
  • 我收到错误无法设置未定义或空引用的属性“HSDRepCode”。这就是我的 javascript 例程 var model = @Html.Raw(Json.Encode(Model)); model.HSDRepCode = $(this).val() 这就是我收到错误时的样子 var model = null;模型.HSDRepCode = $(this).val()。如您所见,var 模型最终为空,这就是我收到错误的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多