如何在MVC asp.net中验证TextBox的可分割性

时间:2016-03-18 14:48:46

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

在这种情况下是否可以验证文本框?此TextBox(@Html.TextBoxFor(model => model.FirstSetList[i].Amount))中的值必须可以被另一个值整除 - 在这种情况下为包(@Html.DisplayFor(model => model.FirstSetList[i].Pack))。

我尝试使用Fluent验证,但客户端验证存在问题。也许它可以在没有流畅验证的情况下完成。只有基本的DataAnnotation?

以下是代码:

@model FP.WebUI.ViewModels.DataItemVm

<h3>
    What kind of currencies you currently own?
</h3>
<br />
<div>
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.FirstSetList.FirstOrDefault().Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstSetList.FirstOrDefault().Pack)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstSetList.FirstOrDefault().Amount)
            </th>
        </tr>

        @using (Html.BeginForm())
        {
            for (var i = 0; i < Model.FirstSetList.Count; i++)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(model => model.FirstSetList[i].Name)
                        @Html.HiddenFor(model => model.FirstSetList[i].Name)
                    </td>
                    <td>
                        @Html.DisplayFor(model => model.FirstSetList[i].Pack)
                        @Html.HiddenFor(model => model.FirstSetList[i].Pack)
                    </td>
                    <td>
                        @Html.TextBoxFor(model => model.FirstSetList[i].Amount)
                    </td>
                </tr>
            }
            <input type="submit" value="Confirm" class="btn btn-success" />
        }
    </table>
</div>

更新 我试图使用远程注释,但是chrome并没有向我的JsonResult方法发送任何信息,我也不知道为什么。

我的ViewModel:

.
.
.
    [Remote("Divisibility", "Account", HttpMethod = "POST", ErrorMessage = "Value is incorrect.")]
            public int Amount { get; set; }
.
.
.

我的观点:

.
.
.
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
            @using (Html.BeginForm())
            {
                for (var i = 0; i < Model.FirstSetList.Count; i++)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(model => model.FirstSetList[i].Name)
                            @Html.HiddenFor(model => model.FirstSetList[i].Name)
                        </td>
                        <td>
                            @Html.DisplayFor(model => model.FirstSetList[i].Pack)
                            @Html.HiddenFor(model => model.FirstSetList[i].Pack)
                        </td>
                        <td>
                            @Html.TextBoxFor(model => model.FirstSetList[i].Amount)
                            @Html.ValidationMessageFor(model => model.FirstSetList[i].Amount)
                        </td>
                    </tr>
                }
                <input type="submit" value="Confirm" class="btn btn-success" />
            }
        </table>
    </div>

我的控制器:

  [HttpPost]
    public JsonResult Divisibility(int valueToCheck)
    {
        var value = User.Identity.GetUserId().Where(x => x.Equals("qqqqq"));
//I know that this condition does not make sense, but this was only for test.
//Anyway like i said, chrome doesn't send anything to this method.

        return Json(value == null);
    }

1 个答案:

答案 0 :(得分:0)

更长的解决方案,也许更好的方法是使用MVC正在使用的相同验证器在javascript中创建自己的验证器。但是,对于其他人提到的东西,服务器端验证。将DataAnnotations与Remote属性一起使用,您也可以完成相同的操作。

http://www.tugberkugurlu.com/archive/asp-net-mvc-remote-validation-for-multiple-fields-with-additionalfields-property

您将创建一个服务器方法来进行验证,但前端将调用它。我提供的链接应该为您提供所需的一切。