необязательный параметр должен быть ссылочного типа MVC4 C # - PullRequest
0 голосов
/ 24 мая 2018

Я работал над приложением MVC4 C # и отправлял по ссылке значение контроллеру таким образом

<a href="@Url.Action("MyAction", "Home", new { Id = @ViewBag.id})">@ViewBag.option2</a>

и работает просто отлично, но теперь мне нужно отправить три значения по одной и той же ссылке натот же контроллер и проверил, что значения не равны нулю

<a href="@Url.Action("MyAction", "Home", new { Id = @ViewBag.id, Id2 = @ViewBag.grupo, Id3 = @ViewBag.correlativo })">@ViewBag.option2</a>

, но получили следующую ошибку

Сообщение = Словарь параметров содержит пустую запись для параметра 'группа' неОбнуляемый тип 'System.Int32' для метода 'System.Web.Mvc.ActionResult ModificarOrdenInicioFormulario (System.String, Int32, Int32)' в 'GFC_Site.Controllers.HomeController'.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

это действие в моем контроллере Home

public ActionResult MyAction(string Id, Int32 grupo, Int32 correlativo)

, и это мой RouteConfig

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapMvcAttributeRoutes(); 
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

подскажите, пожалуйста, чтодобавить или где ошибка?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018
<a href="@Url.Action("MyAction", "Home", new 
                                           { 
                                             Id = @ViewBag.id, 
                                             grupo = @ViewBag.grupo, 
                                             correlativo = @ViewBag.correlativo 
                                            })">@ViewBag.option2</a>

Ваше имя параметра должно быть одинаковым. Для обработки нулевого регистра вы можете изменить свою подпись действия как public ActionResult MyAction(string Id, Int32? grupo, Int32? correlativo)

0 голосов
/ 24 мая 2018

Ваш текущий код генерирует значение атрибута href для ссылки, подобной этой

Home/MyAction/10?id2=123&id3=456

Но ваши параметры метода действия: Id, grupo и correlativo.

Имя параметра вашего метода действия должно совпадать с ключами словаря значений вашего маршрута.

Используйте grupo и correlativo в качестве ключей элемента значения маршрута вместо id2 и id3

<a href="@Url.Action("MyAction", "Home", 
         new { Id = @ViewBag.id, 
               grupo = @ViewBag.grupo, 
               correlativo = @ViewBag.correlativo })">@ViewBag.option2</a>

Это сгенерирует значение атрибута href, подобное этому, которое имеет соответствующие ключи строки запроса, совпадающие с именем параметра метора действия

Home/MyAction/10?grupo=123&correlativo=456

Это должноработать, предполагая, что ваши элементы ViewBag имеют действительные (не нулевые) числовые значения, установленные для него.Если они могут быть нулевыми, рассмотрите возможность изменения параметра метода действия с int на nullable int (int?)

Значение маршрута 10 в URL будет автоматически сопоставлено с параметром с именем Idпотому что мы определили это в шаблоне маршрута по умолчанию, зарегистрированном в методе RegisterRoutes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...