Значение не может быть нулевым. Имя параметра: источник
У меня есть эта ошибка, как ее решить...
Предусмотренный Кодексом РФ является....
Контроллер.......
// 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) <input name='User_Id' id='User_Id' type="hidden" value="@ViewBag.UserId" /> <fieldset> <legend> <h3> User Details </h3> </legend> @Html.Partial("_userDetailsEdit", Model) <br /> <input type="submit" value="Save" /> </fieldset> <fieldset> <legend> <h3> Roles Associated with this User </h3> </legend> <div class="panel" id="RolesTable"> @Html.Partial("_ListUserRoleTable", Model) </div> @Html.Partial("_ListEditableUserRoleTable") <br /> <div> @Html.ActionLink("Go to Roles", "RoleIndex", "Role") </div> </fieldset> } <br /> <div> @Html.ActionLink("Go to Users", "Index", "Admin") </div> <div> @Html.ActionLink("Back to List", "Index") </div> @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
Я скоро пришлю вам электронное письмо