Member 10740412 Ответов: 1

Значение не может быть нулевым. Имя параметра: источник


У меня есть эта ошибка, как ее решить...
Предусмотренный Кодексом РФ является....
Контроллер.......
// GET: User/Edit/5
       public ActionResult Edit(int id)
       {
           UserDTO user = new UserDTO();
           user.UserID = id;
           SetViewBagData(id);
           return View(user);

       }

       // POST: User/Edit/5
       [HttpPost]
       public ActionResult Edit(UpdateUser model, int id)
       {
           try
           {
               UserDTO user = new UserDTO();
               user.UserName = model.UserName;

               new UserHandler().Update(user, id);

               return RedirectToAction("Details", new RouteValueDictionary (new { id = user.UserID}));
           }
           catch
           {
               return View();
           }
       }

public void SetViewBagData(int _userId)
        {
            UserDTO r = new UserDTO();
            ViewBag.UserId = _userId;
            ViewBag.List_boolNullYesNo = this.List_boolNullYesNo();
            ViewBag.RoleId = new SelectList(r.Role.OrderBy(p => p.RoleName), "RoleID", "RoleName");
        }

        public List<SelectListItem> List_boolNullYesNo()
        {
            var _retVal = new List<SelectListItem>();
            try
            {
                _retVal.Add(new SelectListItem { Text = "Not Set", Value = null });
                _retVal.Add(new SelectListItem { Text = "Yes", Value = bool.TrueString });
                _retVal.Add(new SelectListItem { Text = "No", Value = bool.FalseString });
            }
            catch { }
            return _retVal;
        }

public PartialViewResult AddUserRoleReturnPartialView(int id, int userId)
       {           
           new UserHandler().AddUserRole(id, userId);
           SetViewBagData(userId);
           return PartialView("_ListUserRoleTable", userId);
       }


бизнес-логика....
public class UserHandler
    {
        PriviligeContext db = new PriviligeContext();

        public List<UserDTO> GetData()
        {
            var query = from u in db.Users
                        select new UserDTO
                        {
                            UserName = u.Username
                           
                        };
            return query.ToList();
        }

        
        public void Insert(UserDTO user)
        {
            User u = new User();

            u.Username = user.UserName;

            db.Users.Add(u);
            db.SaveChanges();
        }       
        public void Update(UserDTO user, int id)
        {
            var u = db.Users.FirstOrDefault(i => i.UserID == id);
            u.Username = user.UserName;
            db.SaveChanges();
        }
       public void AddUserRole(int id, int userId)
       {
           Role role = db.Roles.Find(id);
           User user = db.Users.Find(userId); 
            
           if (!role.Users.Contains(user))
           {
               role.Users.Add(user);
               db.SaveChanges();
           }
       }
    }

ДТО...
namespace DTO
{
    public class UserDTO
    {
        public int UserID { get; set; }
        public string UserName { get; set; }
        public virtual ICollection<RoleDTO> Role { get; set; }
    }
}

namespace DTO
{
    public class RoleDTO
    {
        public int RoleID { get; set; }
        public string RoleName { get; set; }
        public string Description { get; set; }
        public virtual ICollection<PriviligeDTO> Privilige { get; set; }
        public virtual ICollection<UserDTO> User { get; set; }
    }
}

Изменить Вид......
<pre>model SampleWeb.Models.UpdateUser
@using (Html.BeginForm("Edit", "User", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    &lt;input name='User_Id' id='User_Id' type="hidden" value="@ViewBag.UserId" /&gt;
    &lt;fieldset&gt;
        &lt;legend&gt;
            &lt;h3&gt;
                User Details
            &lt;/h3&gt;
        &lt;/legend&gt;
        @Html.Partial("_userDetailsEdit", Model)
        &lt;br /&gt;
        &lt;input type="submit" value="Save" /&gt;
    &lt;/fieldset&gt;

    &lt;fieldset&gt;
        &lt;legend&gt;
            &lt;h3&gt;
                Roles Associated with this User
            &lt;/h3&gt;
        &lt;/legend&gt;
        &lt;div class="panel" id="RolesTable"&gt;
            @Html.Partial("_ListUserRoleTable", Model)
        &lt;/div&gt;
        @Html.Partial("_ListEditableUserRoleTable")
        &lt;br /&gt;
        &lt;div&gt;
            @Html.ActionLink("Go to Roles", "RoleIndex", "Role")
        &lt;/div&gt;
    &lt;/fieldset&gt;
}
&lt;br /&gt;
&lt;div&gt;
    @Html.ActionLink("Go to Users", "Index", "Admin")
&lt;/div&gt;
&lt;div&gt;
    @Html.ActionLink("Back to List", "Index")
&lt;/div&gt;

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}</pre>

Krunal Rohit

Эта ошибка обычно связана с EF. Попробуйте использовать отладчик и сузить круг вашей проблемы, а также опубликовать соответствующий код и сведения об ошибке.
Размещение такого количества кода не будет работать ни у кого из нас.

-КРОНА

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Отладьте и узнайте точную строку.

Suvendu Shekhar Giri

Вы его отладили? Если да, то что вы обнаружили?

Sinisa Hajnal

Установите точку останова и выполните отладку. Найдите точно, где он терпит неудачу (и сделав это, вы, вероятно, решите ее сами). Удачи

John C Rayan

Ваша проблема заключается в этой строке кода.
[HttpPost]
public ActionResult Edit(UpdateUser model, int id)

Вы ожидаете идентификатор параметра маршрута, но передаете его как user_id. Измените его на user_id.

Member 10740412

это дает мне исключение по этой строке.... значение не может быть нулевым
Видовой мешок.RoleId = новый список выбора(r.Role.OrderBy(p => p.RoleName), "RoleID", "RoleName");

John C Rayan

Вы хотите сказать, что это еще одна проблема? работает ли user_id нормально? где вы изменились на user_id. Как вызвать представление редактирования? вы также ожидаете id в действии редактирования в get. Как вы получаете свой идентификатор пользователя?

Member 10740412

я изменить код в Редактировать действий, чтобы функция user_id...
и это дает мне исключение здесь

John C Rayan

Вы должны изменить только в [HttpPost] Edit not [HttpGet]. Вы можете показать мне измененный код

Member 10740412

public ActionResult Edit(int id)
{
UserDTO user = новый пользователь();
/Пользователь /пользователь = база данных.Пользователей.Найти(идентификатор);
//return View(пользователь);
пользователь.Идентификатор = идентификатор;
SetViewBagData(id);
смотреть возвращение(пользователей);

}

// Сообщение: пользователь/правка/5
[HttpPost]

public ActionResult Edit(UpdateUser model, int user_Id)
{

пробовать
{
UserDTO user = новый пользователь();
пользователь.Имя пользователя = модель.имя пользователя;

new UserHandler().Update(user, user_Id);

возвращение RedirectToAction("детали", новый RouteValueDictionary (новый { идентификатор = пользователей.идентификатор пользователя}));
}
ловить
{
возвращение смотреть();
}
}

John C Rayan

Попробуйте эти 3 вещи.

1. Изменение параметра с функция user_id, чтобы функция user_id (прописная U) также попробуйте с типа String вместо int
2. Проверьте источник html и убедитесь, что вы определенно получаете ценность для
@ViewBag.UserId в следующей строке.
<имя входного='Ид_пользователя' ИД='Ид_пользователя' тип="скрытый" значение="@ViewBag.UserId" />

3. Удалите параметр User_Id из действия Edit post и проверьте FormCollection, чтобы увидеть, видите ли вы скрытое поле User_Id

Member 10740412

теперь я попробовал это сделать, но возникает та же самая ошибка ...
public ActionResult Edit(UpdateUser model, string User_Id)
{
пробовать
{

UserDTO user = новый пользователь();
пользователь.Имя пользователя = модель.имя пользователя;

новый UserHandler().Обновление(пользователь,инт.Синтаксический Анализ(Функция User_id));

возвращение RedirectToAction("детали", новый RouteValueDictionary (новый { идентификатор = пользователей.идентификатор пользователя}));
}
ловить
{
возвращение смотреть();
}
}

Member 10740412

и тоже пытался....
public ActionResult Edit(модель UpdateUser)
{


пробовать
{

UserDTO user = новый пользователь();
пользователь.Имя пользователя = модель.имя пользователя;
int User_Id = пользователь.идентификатор пользователя;
//новый UserHandler().Обновление(пользователь,инт.Синтаксический Анализ(Функция User_id));
new UserHandler().Update(user, User_Id);


возвращение RedirectToAction("детали", новый RouteValueDictionary (новый { идентификатор = пользователей.идентификатор пользователя}));
}
ловить
{
возвращение смотреть();
}
}

John C Rayan

Не могли бы вы опубликовать эту ошибку здесь, пожалуйста. Кроме того, вы можете показать мне свой частичный вид для _userDetailsEdit

Member 10740412

Значение не может быть нулевым.
Имя параметра: источник

Описание: необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения Об Исключении: Система.ArgumentNullException: значение не может быть null.
Имя параметра: источник

Ошибка Источника:


Строка 81: ViewBag.Идентификатор пользователя = _userId;
Строка 82: // ViewBag.List_boolNullYesNo = this.List_boolNullYesNo();
Строка 83: ViewBag.RoleId = новый список выбора(r.Role.OrderBy(p => p.RoleName), "RoleID", "RoleName");
Строка 84: }
Строка 85:

Исходный файл: f:\DOT NET WORKINGS\SamplePrivilige\SampleWeb\Controllers\UserController.cs строка: 83

трассировка стека:


[ArgumentNullException: значение не может быть null.
Имя параметра: источник]
Система.Linq.OrderedEnumerable`2..чтор(интерфейс IEnumerable`1 Источник, Функ`2 качестве параметра keyselector, интерфейса icomparer`1 компаратор, логический убыванию) +5882427
Система.Linq.Перечислимый.OrderBy(IEnumerable`1 source, Func`2 keySelector) +77
SampleWeb.Контроллеры.UserController.SetViewBagData(Int32 _userId) in f:\DOT NET WORKINGS\SamplePrivilige\SampleWeb\Controllers\UserController.cs:83
SampleWeb.Контроллеры.UserController.Edit(Int32 id) in f:\DOT NET WORKINGS\SamplePrivilige\SampleWeb\Controllers\UserController.cs:148
lambda_method(Closure , ControllerBase , Object[] ) +141
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 параметра) +229
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 параметра) +35
Системы.Веб.В MVC.Асинхронность.AsyncControllerActionInvoker.<begininvokesynchronousactionmethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
Системы.Веб.В MVC.Асинхронность.WrappedAsyncResult`2.CallEndDelegate(объекта iasyncresult asyncresult, к) +71
Системы.Веб.В MVC.Асинхронность.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
Системы.Веб.В MVC.Асинхронность.AsyncInvocationWithFilters.&ЛТ;invokeactionmethodfilterasynchronouslyrecursive&ГТ;б__3д() +72
System.Web.Mvc.Async.<>c__DisplayClass46.<invokeactionmethodfilterasynchronouslyrecursive>b__3f() +386
Системы.Веб.В MVC.Асинхронность.AsyncControllerActionInvoker.Endinvokeactionmethod withfilters(IAsyncResult asyncResult) +42
Системы.Веб.В MVC.Асинхронность.&ЛТ;&ГТ;с__DisplayClass2b.&ЛТ;begininvokeaction&ГТ;б__1С() +38
Системы.Веб.В MVC.Асинхронность.&ЛТ;&ГТ;с__DisplayClass21.&ЛТ;begininvokeaction&ГТ;б__1е(объекта iasyncresult asyncresult, К) +186
Системы.Веб.В MVC.Асинхронность.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
System.Web.Mvc.Controller.<beginexecutecore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
Системы.Веб.В MVC.Асинхронность.WrappedAsyncVoid`1.CallEndDelegate(объекта iasyncresult asyncresult, к) +67
Системы.Веб.В MVC.Контроллер.EndExecuteCore(IAsyncResult asyncResult) +53
Системы.Веб.В MVC.Асинхронность.WrappedAsyncVoid`1.CallEndDelegate(объекта iasyncresult asyncresult, к) +36
Системы.Веб.В MVC.Контроллер.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.MvcHandler.<beginprocessrequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44
Системы.Веб.В MVC.Асинхронность.WrappedAsyncVoid`1.CallEndDelegate(объекта iasyncresult asyncresult, к) +67
Системы.Веб.В MVC.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399
Системы.Веб.Класса HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +137

Member 10740412

@model DTO.UserDTO
@{if (Model != null)
{
<div id="expanderContent">
<стиль таблицы='ширина: 100%'>

<tr>
<td style='width: 10%; font-weight: bold' class='userTable'>
@Html.LabelFor(model => model.имя пользователя)
</td>
<td style='width: 28%' class='userTable'>
@Html.TextBoxFor(model => model.Имя пользователя, новый { @class = "singlelinetextinput" })
@Html.ValidationMessageFor(model => model.имя пользователя)
</td>
<td></td>
</tr>
</Таблица>
</div>
}
}

John C Rayan

Ну, исключение выбрасывается в GET action, а не POST. Теперь покажите мне, как вы называете действие редактирования с Вашего взгляда. Я думаю, что вы, должно быть, называете это с какой-то другой точки зрения.

John C Rayan

Вы должны отладить и посмотреть, есть ли r.Role в новом списке выбора(r.Role.OrderBy(p => p.RoleName), "RoleID", "RoleName");
не является нулевым. Я думаю, что вы не загрузили роли для пользователя. Я его нигде не вижу.

Member 10740412

Изменить Вид.....

@model SampleWeb.Модели.UpdateUser

@{
Видовой мешок.Title = "Правка";
}

@использование (в формате HTML.Бигинформ("Редактирование", "Пользователь", FormMethod.Почта))
{
@HTML-код.ValidationSummary(правда)
<имя входного='Ид_пользователя' ИД='Ид_пользователя' тип="скрытый" значение="@ViewBag.UserId" />



<fieldset>

Сведения О Пользователе

@Html.Partial("_userDetailsEdit", модель)
<br />
в <тип входного="представить" значение="сохранить" /&ГТ;
</fieldset>

<fieldset>
@**@
Роли, связанные с этим пользователем
@*
*@
&ЛТ;панели div класс="" идентификатор="RolesTable"&ГТ;
@Html.Partial("_ListUserRoleTable", Модель)
</div>
@Html.Partial("_ListEditableUserRoleTable")
<br />
@*<div>
@формат HTML.ActionLink("перейти к ролям", "RoleIndex", "роль")
</div>*@
</fieldset>
}
<br />
<div>
@формат HTML.ActionLink("перейти к пользователям", "индекс", "пользователи")
</div>
<div>
@формат HTML.ActionLink("вернуться к списку", "индекс")
</div>

@раздел Скрипты {
@Файлы сценариев.Render("~/bundles/jqueryval")
}

индексированное представление.....
@model IEnumerable<DTO.UserDTO>

@{
Видовой мешок.Title = "Индекс";
}

Индекс



<p>
@формат HTML.ActionLink("Создать Новый", "Создать")
</p>
<table class="таблица">
<tr>

<th>
@Html.DisplayNameFor(model => model.имя пользователя)
</th>
в <ом&ГТ;&ЛТ;/й&ГТ;
</tr>

@foreach (элемент var в модели) {
<tr>

<td>
@Html.DisplayFor(modelItem => item.имя пользователя)
</td>
<td>
@формат HTML.Actionlink панели("редактирование", "редактирование", новый { /*код=товар.Свойства primarykey */ }) |
@формат HTML.ActionLink("Details", "Details", new { /* id=item.Свойства primarykey */ }) |
@формат HTML.Actionlink панели("удалить", "удалить", новый { /* код=товар.Свойства primarykey */ })
</td>
</tr>
}

</Таблица>

Member 10740412

Вот где загружаются роли...
[HttpGet]

общественные PartialViewResult AddUserRoleReturnPartialView(int идентификатор, int идентификатор пользователя)
{
новый UserHandler().AddUserRole(идентификатор, идентификатор пользователя);
SetViewBagData(идентификатор пользователя);
return PartialView("_ListUserRoleTable", userId);


}
Определение Функции AddUserRole ()....
общественного недействительными AddUserRole(int идентификатор, int идентификатор пользователя)
{
Роль Role = db.Roles.Найти(id);
Пользователь = дБ.Пользователей.Найти(userId);

если (!роль.Пользователи.Содержит(пользователь))
{
роль.Пользователи.Добавить пользователей);
дБ.Метод SaveChanges();
}
}

John C Rayan

Раскомментируйте id param здесь так, чтобы id был передан для редактирования . @формат HTML.Actionlink панели("редактирование", "редактирование", новый { /*код=товар.Свойства primarykey */ })
Где вы загружаете роли здесь :
public ActionResult Edit(int id)
{
UserDTO user = новый пользователь();
пользователь.Идентификатор = идентификатор;
SetViewBagData(id);
смотреть возвращение(пользователей);

}

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

Member 10740412

как я могу отправить вам проект

John C Rayan

дайте мне вашу электронную почту, и я пришлю вам свою электронную почту. Пришлите мне по электронной почте. Вы пробовали раскомментировать идентификатор? Попробовать это
@формат HTML.Actionlink панели("редактирование", "редактирование", новый { ИД=@товар.Свойства primarykey })

Member 10740412

Я пытался, но ничего не вышло

Member 10740412

fhdgfdfsjdsjfjsd

Member 10740412

Разве ты не собираешься мне помочь????

Member 10740412

Плззззз ответь мне......

John C Rayan

Я скоро пришлю вам электронное письмо

1 Ответов

Рейтинг:
12

John C Rayan

Я вернул вам исправленный проект в рабочем состоянии


Member 3777988

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

[HttpPost]
публичное обновление ActionResult(модель DataEventViewModel)
{
модель.Обновление();
return RedirectToAction("Detail", "DataActivityProject", new { dataActivityProjectID = model._DataEvent.DataActivityProjectID });
}

@использование (в формате HTML.Бигинформ("обновление", "DataEvent", нуль, FormMethod.Пост, нуль))
{


@HTML-код.Частичная("_DataEventForm")





@формат HTML.Actionlink панели("отменить", "деталь", "DataActivityProject", новый { dataActivityProjectID = модель._DataEvent.DataActivityProject.DataActivityProjectID }, new { @class = "btn btn-warning" })
@*Удалить*@



}

John C Rayan

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