我正在尝试将userid
传递给我在控制器中的操作。我的操作就像这样,你可以在这里看到:
[HttpPost]
[Authorize(Roles = "Admin,Expert")]
public ActionResult AddExpert(AssistanceJuror assistanceJuror,int UserId)
{
User user = objUserRepository.FindBy(i => i.Id == assistanceJuror.UserId).First();
user.Enable = "فعال";
assistanceJuror.Date = DateTime.Now;
objUserRepository.Edit(user);
objUserRepository.Save();
objAssistanceJurorRepository.Add(assistanceJuror);
TempData["Message"] = "کارشناس به معاونت اختصاص داده شد";
objAssistanceJurorRepository.Save();
return RedirectToAction("IndexExpert", "Assistance");
}
所以这个动作需要2个参数,其中一个是我的模型,另一个是userId
。所以我需要从视图中获取两个值,我的视图是这样的:
@using ViewModelDomain
@using Repository;
@model DomainClass.AssistanceJuror
@{
ViewBag.Title = "AddExpert";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="wrapper-left">
<div class="wrapper-top-addCompany">
انتساب کارشناس به معاونت
<div style="float: left; padding-left: 20px;">
<div class="divider"></div>
<div class="buttonPossion">
@Html.ActionLink("بازگشت", "Index", "Assistance", new { companyid = ViewBag.firstIdeaId }, new { @class = "buttonBlueLink" })
</div>
<div class="divider"></div>
</div>
</div>
<div class="wrapper-Member" style="padding-bottom: 30px; margin-bottom: 5px; width: 100%; min-height: 550px;">
<h2>اضافه کردن کارشناس جدید
</h2>
<br />
<br />
<br />
<div class="editor-label">
انتخاب معاونت
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.AssistanceId, (SelectList)ViewBag.listAssistance)
</div>
<div class="editor-label">
انتخاب کارشناس
</div>
@* <div class="editor-field">
@Html.DropDownListFor(model => model.userId, (SelectList)ViewBag.listDisableExpert)
</div>*@
@{
if (User.IsInRole("Expert") || User.IsInRole("Admin"))
{
<div class="wrapper-Member" style="border-top: 1px solid #d3d3d3; margin-top: 30px; width: 99.5%; border-left: 1px solid #d3d3d3; margin-right: 1px">
<div class="tab-list-company" style="margin-right: -1px; width: 180px">
<h2 style="font: normal 13px BHoma; margin-right: 10px; margin-top: 2px;">اختصاص کارشناس به معاونت
</h2>
</div>
<div class="list-company" style="border: none; width: 98%">
<table>
<thead>
<tr>
<th>نام و نام خانوادگی</th>
<th>سطح تحصیلات</th>
<th>رشته تحصیلی</th>
<th>شماره همراه</th>
<th>تلفن</th>
<th>ایمیل</th>
@if (User.IsInRole("Expert") || User.IsInRole("Admin"))
{
<th style="width: 20px;">اضافه</th>
}
</tr>
</thead>
@{
userRepository objUserRepository = new userRepository();
//var listJuror = objUserRepository.FindBy(i => i.Permission == "Juror").ToList();
List<DomainClass.User> listDisableAssistance = objUserRepository.ReturnUserByEnablePermission("غیرفعال", "Assistance");
}
@foreach (var temp in listDisableAssistance)
{
<tr>
<td>
@{
string fullName = temp.Name + " " + temp.Family;
}
@Html.DisplayFor(modelItem => fullName)
</td>
<td>
@Html.DisplayFor(modelItem => temp.EducationLevel)
</td>
<td>
@Html.DisplayFor(modelItem => temp.Field)
</td>
<td>
@Html.DisplayFor(modelItem => temp.Mobile)
</td>
<td>
@Html.DisplayFor(modelItem => temp.Tell)
</td>
<td>
@Html.DisplayFor(modelItem => temp.Email)
</td>
<td>
@using (Html.BeginForm("AddExpert", "Assistance", routeValues: new { userid = temp.Id }))
{
<input type="submit" value="" class="Add" title="اضافه کردن" />
}
</td>
</tr>
}
</table>
</div>
</div>
}
}
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
在这部分
<td>
@using (Html.BeginForm("AddExpert", "Assistance", routeValues: new { userid = temp.Id }))
{
<input type="submit" value="" class="Add" title="اضافه کردن" />
}
</td>
我正在尝试将userId
传递给我的操作,但它不起作用,我收到一条错误消息,指出用户ID为空。
祝你好运
答案 0 :(得分:1)
我认为问题在于您没有将assistanceJuror
参数发送到控制器。
new { userid = temp.Id }
应该是
new {assistanceJuror= value, userid = temp.Id }
但我认为AssistanceJuror
是一种复杂类型,因此您会收到错误消息。尝试只发送一个id(例如)并从控制器中的数据库获取信息。
像这样的东西
public ActionResult AddExpert(string assistanceJurorId,int UserId)
{
var assistanceJuror= //get Your Variable Here;
User user = objUserRepository.FindBy(i => i.Id == assistanceJuror.UserId).First();
user.Enable = "فعال";
assistanceJuror.Date = DateTime.Now;
objUserRepository.Edit(user);
objUserRepository.Save();
objAssistanceJurorRepository.Add(assistanceJuror);
TempData["Message"] = "کارشناس به معاونت اختصاص داده شد";
objAssistanceJurorRepository.Save();
return RedirectToAction("IndexExpert", "Assistance");
}
并从视图中以这种方式调用
@using (Html.BeginForm("AddExpert", "Assistance", routeValues: new {assistanceJurorId= model.AssistanceId, userid = temp.Id }))
这样您就不会将下拉列表的选定值(存储在model.AssistanceId
变量中)传递给控制器
assistanceJurorId= model.AssistanceId
但是模型中属性的初始值,因为下拉列表是以这种方式生成的
@Html.DropDownListFor(x => x.AssistanceId, (SelectList)ViewBag.listAssistance))
要在下拉列表中发送所选元素的正确值,我建议您删除Html。 BeginForm并仅在表单提交时向您的控制器发出ajax调用。通过这种方式,您可以确保发送正确的值。
答案 1 :(得分:0)
MVC的最佳方法是在GET方法中创建模型,在View中使用它并在接受Post动词的Action中POST模型。因此,创建一个模型类,在其中添加所有属性(也是用户标识),在顶部的视图添加中
@model YourClassModel
和你的POST方法
public ActionResult AddExpert(YourClassModel model)