大家!我是MVC框架的新手,最近,我遇到了一个麻烦:
我有一个" EditInfo"控制器 基本逻辑,但我无法理解一件事 -
[HttpGet]
public ActionResult EditPacientInfo(string id)
{
// string username = "test_pacient@gmail.com"; <-- THIS ACTUALLY WORKS
string username = id; // <-- AND THIS NOT + 404-NotFoundError
// Fetch the userprofile
ApplicationUser user = db.Users.FirstOrDefault(u => u.UserName.Equals(username));
// Construct the viewmodel
ApplicationUser model = new ApplicationUser()
{
Email = user.Email,
PacientInfo = user.PacientInfo
};
return View(model);
}
因此,正如您所看到的那样
如果有助于解决我的问题,则有一个视图代码:
@foreach (var user in Model.Pacient)
{
<p>
<strong>@user.Username | @ViewBag.Pacient | @Html.ActionLink("Обновить информацию о пациенте ", "EditPacientInfo", "Doctor",new {id = user.Username}) </strong>
</p>
}
如果您可以添加或找到一些真正可以帮助您的代码/内容,那将是很棒的(非常感谢!)
udpate 我更改了查看中的ActionLink方法(感谢 t_roy ),我终于可以将数据发送到地址栏,但是我有一个新问题 - 如果我在控制器中启动了一个"用户名"字段 - 我的逻辑工作,如果我通过地址栏启动它
我缺少SMTH对于使控制器的操作使用获取参数很重要吗?(这是Get Post方法):
[HttpGet]
public ActionResult EditPacientInfo(string id)
{
// string username = "test_pacient@gmail.com"; <-- THIS ACTUALLY WORKS
string username = id.ToString();<-- AND THIS NOT + 404-NotFoundError
// Fetch the userprofile
ApplicationUser user = db.Users.FirstOrDefault(u => u.UserName.Equals(username));
// Construct the viewmodel
ApplicationUser model = new ApplicationUser()
{
Email = user.Email,
PacientInfo = user.PacientInfo
};
return View(model);
}
[HttpPost]
public ActionResult EditPacientInfo(ApplicationUser pacient)
{
if (ModelState.IsValid)
{
string username = User.Identity.Name;
// Get the userprofile
ApplicationUser user = db.Users.FirstOrDefault(u => u.UserName.Equals(username));
// Update fields
user.Email = pacient.Email;
user.PacientInfo = pacient.PacientInfo;
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index", "Doctor"); // or whatever
}
return View(pacient);
}
这是因为您的@Html.ActionLink
助手方法的实现不正确。
PER MSDN
没有接受3个字符串对象,然后是1个对象(在您的情况下,是您的路由值)。
。您需要使用ActionLink助手方法的这种过载方法:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
object routeValues,
object htmlAttributes
)
因此,在您的情况下:
@Html.ActionLink("Обновить информацию о пациенте ", "EditPacientInfo", "Doctor",new {id = user.Username}, null)
让我知道这是否有帮助!
我应该在使用地址栏正确传递数据之前使用[路由]属性
这是在这种情况下应编写代码的方式:
[Route("Doctor/EditPacientInfo/{name}")]
public ActionResult EditPacientInfo(string name)
{
// string username = "test_pacient@gmail.com"; <-- THIS ACTUALLY WORKS
string username = name;
// Fetch the userprofile
ApplicationUser user = db.Users.FirstOrDefault(u => u.UserName.Equals(username));
ViewBag.Email = user.Email;
// Construct the viewmodel
ApplicationUser model = new ApplicationUser()
{
PacientInfo = user.PacientInfo
};
return View(model);
}
@ActionLink与[Route]属性结合:
@Html.ActionLink("A link name ", "EditPacientInfo", " Doctor",new {name = user.Username},null)