2017-08-29 12 views
0

誰もが! 私はMVCフレームワークに新しいですし、最近になって、私は1つのトラブルに直面している:私は「EditInfo」コントローラ+基本的なロジックを持って が、私は一つのことを理解することはできません -アドレスバー経由でデータを正しく送信できない

ので
[HttpGet] 
    public ActionResult EditPacientInfo(string id) 
    { 

     // string username = "[email protected]"; <-- 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); 
    } 

、あなたは私ができる見ることができるように私の問題を解決するために役立つ場合は、Viewコードがあります:私は、私の問題を解決するために役立つ場合、ビューコードがあります:

@foreach (var user in Model.Pacient) 
     {  
      <p> 
       <strong>@user.Username | @ViewBag.Pacient | @Html.ActionLink("Обновить информацию о пациенте ", "EditPacientInfo", "Doctor",new {id = user.Username}) </strong> 
      </p> 

    } 

これはあなたが本当にここに助けることができるいくつかのコード/ものを追加したり、見つけることができれば素晴らしいことULD(どうもありがとうございました!)

UDPATE 私は、ビューの私のActionLinkの方法(T_Royのおかげで)変更し、私は最終的にできましたアドレスバーにデータを送信しますが、私は新しい問題が発生しました。コントローラの「ユーザー名」フィールドを開始すると、ロジックが機能します。アドレスバーを使用しても起動しません。

コントローラーを作るのに、アクションはGETパラメータを使用しますか? (ここでは+ POSTメソッドをGETです):

[HttpGet] 
    public ActionResult EditPacientInfo(string id) 
    { 

     // string username = "[email protected]"; <-- 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); 
    } 
+0

あなたのアクションにブレークポイントを置くと、あなたはそれをヒットしますか?生成されたURL(ブラウザのF12)を表示してください – CodeNotFound

+0

@CodeNotFound、以下のユーザーは既に助けていますが、私はUpdate段落の問題を抱えています。 – clyde

+0

URLを含んでいるアクションリンクの上にマウスでチェックしてください。ブラウザで –

答えて

-1

@Html.ActionLinkヘルパーメソッドの実装が間違っているためであること。 MSDN

パー

3つの文字列オブジェクトを受け取り、その後、1つのオブジェクトは(あなたのケースでは、あなたのルート値である)、過負荷はありません。

@Html.ActionLink("Обновить информацию о пациенте ", "EditPacientInfo", "Doctor",new {id = user.Username}, null) 

は、このことができます場合は、私に教えてください:あなたのケースでそう

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    object routeValues, 
    object htmlAttributes 
) 

あなたはActionLinkのヘルパーメソッドのこのオーバーロードメソッドを使用する必要があります!

+0

ありがとう@T_Roy!それは実際には機能しましたが、別のタイプの問題は発生しません。これはバーのアドレスに値を与えますが、アプリケーションは404エラーを受け取り続けます。私はコントローラのロジックにいくつかの問題があると思うが、私は "username"フィールドを開始すると、それが動作するかどうかを推測することができないと思う。私はアドレスバー(私は私の質問を更新している)を起動する場合ではない – clyde

+0

また、静的MvcHtmlString ActionLinkの( このHtmlHelperのHtmlHelperの、 文字列linkText、 文字列actionNameの、 文字列コントローラ名、 オブジェクトrouteValues )をチェックhttps://msdn.microsoft.com/en-us/library/system.web.mvc.html .linkextensions.actionlink(v = 118).aspx –

+0

@Saneeshkunjunniあなたは何について話していますか?あなたが提供したリンクを見ました。このHtmlHelper htmlHelper、string linkText、string actionName、string controllerName、object routeValues'を受け入れるオーバーロードはありません。これらのオプションを持つ唯一のオーバーロードは 'this HtmlHelper htmlHelper、 \t文字列linkText、 \t文字列actionNameの、 \t文字列コントローラ名、 \tオブジェクトrouteValues、 \tオブジェクトhtmlAttributes' ...私はあなたがdownvoted 1だと仮定? –

-1

さて、答えはあるので - GETメソッドは、アドレスバーを経由して適切にデータを渡すために前に>私は[ルート]属性を使用should`ve: https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/
これは、この場合には書かれるべき可能性がどのようである:

[ルート]属性と結合する
[Route("Doctor/EditPacientInfo/{name}")] 
    public ActionResult EditPacientInfo(string name) 
    { 

     // string username = "[email protected]"; <-- 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:

    @Html.ActionLink("A link name ", "EditPacientInfo", " Doctor",new {name = user.Username},null) 
    

あなたのおかげで、私は質問を解決するのを手伝った。

関連する問題