Barcelonista Naser Ответов: 1

Как проверить поле hiddenfor в ASP.NET MVC razor view?


У меня есть виджет jQuery selectable в моем представлении razor, который отображается как и обновляется из строки, разделенной запятыми, в таблице SQL Server, как показано ниже:
<ol class="ui-selectable" style="width:auto" id="selectable1">

@{
    var color = Model.AvailableColors.Split(',');
    foreach (var clr in color)
        {
          <li class="btn red-mint" style="margin: 10px 0">@clr</li>
        }
 }
 </ol>


Выше, как уже упоминалось, отображается набор цветов, таких как (красный, зеленый, фиолетовый и т. д.) список, который, конечно же, можно выбрать, и пользователь может выбрать только один из списка одновременно.
Я передал выбранное значение элемента списка в скрытое поле, которое затем передается методу действия контроллера с помощью приведенного ниже скрипта.

<script type="text/javascript">
    $(document).ready(function () {
        $("#selectable1").selectable({
            selected: function (event, ci) {
                $(ci.selected).siblings().removeClass("ui-selected");
                $("#selectedcolor").val($("#selectable1>li.ui-selected").html());
            }
        });

    });
</script> 



В моей форме у меня есть атрибут HiddenFor razor для передачи значения выбранного элемента списка контроллеру, как показано ниже:

@Html.HiddenFor(m => m.AvailableColors, new { @id = "selectedcolor" })


Теперь вот что-то, что я застрял и не мог найти решение, ища в интернете. Я хочу, чтобы если ни один элемент не выбран, то проверка должна произойти и должно появиться сообщение проверки для AvailableColors, но я понятия не имею, как это сделать. Какая-нибудь помощь, пожалуйста?

Обратите внимание, что я передаю значения из представления в другой метод действия контроллера, вот метод действия.


public ActionResult AddToCart(int id,int SelectedQuantity,  string SelectedSizes, string AvailableColors)
{
    // Retrieve the album from the database
    var addedProduct = dbContext.Products
        .Single(product => product.ProductID == id);

    // Add it to the shopping cart
    var cart = ShoppingCart.GetCart(this.HttpContext);

    cart.AddToCart(addedProduct, SelectedQuantity, AvailableColors,SelectedSizes);

    // Go back to the main store page for more shopping
    return RedirectToAction("Index");
}


Что я уже пробовал:

Я попытался добавить еще одно свойство в свою модель представления, как показано ниже, с аннотацией данных [Required].

открытый класс SizeColorViewModel
{
[HiddenInput(DisplayValue = false)]
[Ключ]
public int ProductID { get; set; }
[Дисплей(Имя="Выберите Размер")]
[Обязательно(ErrorMessage="Пожалуйста, выберите размер")]
public string AvailableSizes { get; set; }

[Требуемый]
public string SelectedSizes { get; set; }
}
Но даже то, что я не мог проверить это поле, ни малейшей идеи?

Sreekanth Mothukuru

Попробуйте использовать TextboxFor вместо hiddenfor и установить свойство css, чтобы сделать его скрытым, а затем написать обязательный атрибут для того же самого.

Если это не сработает, попробуйте написать пользовательскую проверку..

1 Ответов

Рейтинг:
1

Vincent Maverick Durano

Клиентский код не проверяет скрытые поля. Вы должны настроить свою модель так, чтобы она была обязательной, и передать ее в свое скрытое поле. Теперь, когда вы публикуете, вы можете использовать ModelState.IsValid, чтобы проверить, прошла ли вся проверка. Видеть, jquery - как проверить поля hiddenfor в asp.net mvc razor views?[^]