无法通过地址栏正确发送数据



大家!我是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)
    

相关内容

  • 没有找到相关文章

最新更新