2017-10-11 1 views
1

私は現在TechnicianViewModelで技術者のIEnumerableコレクションを返すビューを持っています。ビューモデルが正しく挿入され、オブジェクトが正しく表示されます。ViewModelを介してコントローラにIDを返すためにViewを取得するにはどうすればよいですか?

しかし、現時点では、私は特定の技術者の選択に関して正しい方向に私を指差す必要があります。

技術者がMore Infoをクリックした場合、[HttpGet]リクエストが開始され、queryStringが返されます。そして、これは、このプロジェクトの要件に反している正確に何である(プロジェクトの要件:なしクエリ文字列をURLに表示されます)

ここで表示される: - 。

@model IEnumerable<ActionAugerMVC.ViewModels.TechnicianViewModel> 
    <div class="row"> 
     @foreach (var item in Model) 
     { 
      <div class="col-sm-6 col-md-3"> 
       <div class=""> 
        <div class=""> 
         <div class=""> 
          @item.UserName 
         </div> 
         <div class=""> 
          Technician 
         </div> 
        </div> 
        <div class=""> 
         <img src="~\[email protected]()" class="img-responsive" alt="..."> 
        </div> 
        <div class=""> 
         <p class="overlay__desc"> 
          @item.Bio 
         </p> 
         <ul class="overlay__social"> 
          <li><a href="#"><i class="ion-social-twitter"></i></a></li> 
          <li><a href="#"><i class="ion-social-facebook"></i></a></li> 
          <li><a href="#"><i class="ion-social-skype"></i></a></li> 
          <li><a href="#"><i class="ion-social-whatsapp-outline"></i></a></li> 
         </ul> 
         <a href="@Url.Action("Profile","Technician",new { url = item.GenerateURL() })" class="btn btn-accent">More info</a> 


        </div> 
       </div> 
      </div> 
     } 
     </div> <!--/.row --> 

ここでは、ビューモデルであります: -

public class TechnicianViewModel 
{ 
public Guid ID { get; set; } 
public string UserName { get; set; } 
public string Bio { get; set; } 
public string GenerateName() 
{ 
    string str = GenerateURL(); 
    str = str + ".jpg"; 
    return str; 
} 
public string GenerateURL() 
{ 
    string phrase = string.Format("{0}", UserName); 
    string str = phrase.ToLower(); 
    str = Regex.Replace(str, @"\s", "-"); 
    return str; 
} 
} 

どのように私は、私は、ビューによって返されたのviewmodelオブジェクトからIDを持つことができるように、私はここで実装していたとして、私のコントローラメソッドは[HttpGet]ことを避けることができます。あなたのビューで

 [HttpGet] 
    [Route("technician/profile/calgary-{url}")] 
    public IActionResult Profile(Guid? ID,string url) 
    { 
     var Profile = unitOfWork.TechnicianRepository.GetByGuidId(ID); 
     return View(Profile); 
    } 
+0

モデルプロパティにルート値として送信することなくアクセスするには、submit要素を使用してフォームを送信するか、submit経由で送信する必要がありますjquery。 – akerra

+0

@kerraしたがって、現在 'Url.Action'を保持する' a'リンクをフォームのポストボタンに変更する必要がありますか? –

+0

はい、私は 'その他の情報のようなものをお勧めします'しかし、どの技術者が選択されたかを知るための方法が必要です。隠されたdivの値を選択した技術者のIDに設定し、それを新しいモデルフィールドにバインドします – akerra

答えて

0

は、次のようにリンクを変更します。

<a href="@Url.Action("Profile","Technician",new { id = item.ID.ToString() })" class="btn btn-accent">More info</a> 

あなたのコントローラのメソッドにHTTPGETとルートデコレータを取り除くことができます。これらはデフォルトのルーティング設定で処理されます:

+0

URLにIDが表示されないようにしますか? –

+0

なぜIDをURLに入れたくないのですか? –

+0

URLをクレンジングしながらguidを渡すためにTempDataを使用する上記を試してください – akerra

関連する問題