我使用EF制作一个简单的域名管理应用程序。它包含数据库中的客户端,域和TLD类型。
我创建了控制器,允许我分别在我的数据库中创建客户端,域和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);
}
这就是创建视图的字段集:
<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方法的新视图,这将允许我在当前创建一个新的域名看客户。所以我想运行应用程序并转到/客户端/索引点击客户端上的详细信息,让我们说ID = 6,所以我现在正在查看客户/详细信息/ 6。在此页面上,我添加了以下操作链接:
@Html.ActionLink("Add Domain", "Add_Domain", "Domena", new { id = Model.KlientID })
这给了我奇怪的链接: / Klient / Add_Domain?长度= 6 代替 : /域/ Add_Domain / 6 但是,当我删除&#34; new {id = Model.KlientID}&#34;它虽然创造了正常的链接......
无论如何,如何修改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 :(得分: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)
这可以为您提供您期望的输出。