シンプルなドメイン名管理のために EF を使用してアプリケーションを作成しています。これには、データベース内のクライアント、ドメイン、および TLD タイプが含まれています。
DB にクライアント、ドメイン、および TLD を個別に作成できるコントローラーを作成しました。私が達成しようとしているのは、クライアントのページの下にドメインを直接追加して、新しいドメイン名を作成するたびに ClientID を選択しないようにし、DB に新しいドメイン名を作成するために通過するページの量を最小限に抑える可能性です。
これまでのところ、私が使用しているモデルは次のとおりです。
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 (tlds モデル) :
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);
}
それが create view のフィールドセットです:
<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 (上記の Create メソッドがある場所) の下に Add_Domain という新しいメソッドを作成し、その Add_Domain メソッドの新しいビューを作成することです。これにより、現在表示されているクライアントの下に新しいドメイン名を作成できます。したがって、アプリを実行し、クライアントの /Clients/Index クリックの詳細に移動したいので、ID = 6 としましょう。つまり、Clients/Details/6 を表示しています。このページに、次のアクション リンクを追加しました。
@Html.ActionLink("Add Domain", "Add_Domain", "Domena", new { id = Model.KlientID })
/Domain/Add_Domain/6 の代わりに /Klient/Add_Domain?Length=6 という奇妙なリンクが表示されますが、「new {id = Model.KlientID }」ビットを削除すると、通常のリンクが作成されます...
とにかく、リストからクライアントを選択する必要がなく、Add_Domain メソッドをクリックしたクライアントにドメイン名が追加されるように、GET および POST httpPost を変更するにはどうすればよいですか?
編集: 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 の値を取る必要があります。