2013-04-14 31 views
3

我正在使用EF進行簡單域名管理的應用程序。它包含數據庫中的客戶端,域和TLD類型。試圖讓視圖記住ClientID

我已經創建了控制器,允許我分別在我的數據庫中創建客戶端,域和TLD。我想要實現的是,可以直接在客戶頁面下添加域名,以避免每次創建新域名時選擇ClientID,並儘量減少要通過的頁面數量,以便在數據庫中創建新的域名。

到目前爲止,這裏是我使用的模型:

Klient (client model) : 

public class Klient 
    { 
    public int KlientID { get; set; } 
    public string Imie { get; set; } 
    public string Nazwisko { get; set; } 
    public string Firma { get; set; } 
    public virtual ICollection<Domena> Domeny { get; set; } 
    } 

DOMENA(域模型):

public class Domena 
{ 
    public int DomenaID { get; set; } 
    public int TLDID { get; set; } 
    public int KlientID { get; set; } 
    public string Nazwa { get; set; } 
    public virtual TLD TLD { get; set; } 
    public virtual Klient Klient { get; set; } 
} 

TLD(頂級域名模型):

public class TLD 
{ 
    public int TLDID { get; set; } 
    public string Typ { get; set; } 
    public int Cena { get; set; } 
    public virtual ICollection<Domena> Domeny { get; set; } 
} 

控制方法這讓我創建的新域名是:

 // GET: /Domena/Create 

    public ActionResult Create() 
    { 
     ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ"); 
     ViewBag.KlientID = new SelectList(db.Klienci, "KlientID", "Firma"); 
     return View(); 
    } 

    // 
    // POST: /Domena/Create 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(Domena domena) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Domeny.Add(domena); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ", domena.TLDID); 
     ViewBag.KlientID = new SelectList(db.Klienci, "KlientID", "Imie", domena.KlientID); 
     return View(domena); 
    } 

這就是創建視圖的字段集:

<fieldset> 
    <legend>Domena</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.TLDID, "TLD") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("TLDID", String.Empty) 
     @Html.ValidationMessageFor(model => model.TLDID) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.KlientID, "Klient") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("KlientID", String.Empty) 
     @Html.ValidationMessageFor(model => model.KlientID) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Nazwa) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Nazwa) 
     @Html.ValidationMessageFor(model => model.Nazwa) 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

權,我想要做的就是DomenaController下創建一個新的方法(如上面的創建方法位於)呼籲Add_Domain和新景觀爲那個Add_Domain方法,這將允許我在當前查看的客戶端下創建一個新的域名。所以我想運行應用程序並轉到/客戶端/索引點擊客戶端的詳細信息,可以說ID = 6,所以我現在正在查看客戶端/詳細信息/ 6。在這個頁面上我已經添加了以下行動鏈接:

@Html.ActionLink("Add Domain", "Add_Domain", "Domena", new { id = Model.KlientID }) 

這給了我奇怪的鏈接: /Klient/Add_Domain長度= 6 代替: /域/ Add_Domain/6 然而,當我刪除「新{id = Model.KlientID}」位它創建正常鏈接雖然...

無論如何,我如何修改GET和POST httpPost,所以我不必從列表和域中選擇客戶端名稱將被添加到我點擊Add_Domain方法的客戶端中?

編輯: RouteConfig

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

編輯2:現在

鏈接的問題是固定的,非常感謝你。問題的其他部分仍然存在:上面描述的新Add_Domain方法應該如何(GET和POST)? - 它應該採用KlientID的值,而不是顯示可供選擇的客戶端列表。

+0

你可以發佈項目的路線配置嗎? – StringBuilder

+0

@StringBuilder,添加到我的問題底部。 – Abbys

+0

歡迎來到Stackoverflow!沒有必要爲標題添加標籤,這裏有一個標籤系統。請閱讀http://meta.stackexchange.com/q/19190瞭解更多信息。 – Patrick

回答

2

使用不正確的簽名您的操作鏈接:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText,  // "Add Domain" 
    string actionName, // "Add_Domain" 
    Object routeValues, // "Domena" 
    Object htmlAttributes // new { id = Model.KlientID } 
) 

你應該使用this one

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

例如:

@Html.ActionLink(
    "Add Domain", 
    "Add_Domain", 
    "Domena", 
    new { id = Model.KlientID }, 
    null) 

這應該給你的輸出你是期待。

+0

好的,謝謝你的提示。這將整理鏈接,任何想法如何修改上面的Create方法,以便直接創建域到ActionLink中給出的KlientID?謝謝。 – Abbys