2017-10-11 64 views
1

我目前有一個視圖,它通過TechnicianViewModel返回IEnumerable技術人員集合。視圖模型填充良好並正確顯示對象。如何讓View通過ViewModel將ID返回給控制器?

但是,此刻我需要有人指導我選擇特定技術人員的正確方向。

如果我在技術人員上點擊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; 
} 
} 

如何避免我的控制方法是一種[HttpGet],因爲我曾在這裏實現,這樣我可以有一個由視圖返回的視圖模型對象的ID。

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

如果你想不把他們作爲routevalue訪問模特屬性,則需要發佈形式提交元素,或者經由所提交:那些將被默認路由配置被照顧jQuery的。 – akerra

+0

@akerra所以我必須改變當前持有'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路線裝飾的。

public ActionResult Profile(string id) 
{ 
    TempData["guid"] = id; 
    return RedirectToAction("Profile"); 
} 

public ActionResult Profile() 
{ 
    Guid guid = Guid.Parse(TempData["guid"]); 
    var Profile = unitOfWork.TechnicianRepository.GetByGuidId(guid); 
    return View(Profile); 
} 
+0

會阻止ID出現在URL中嗎? –

+0

爲什麼你不想在URL中的ID? –

+0

嘗試使用TempData在清理URL的同時傳遞GUID的上述內容 – akerra

相關問題