C# 使用EF将数据插入SQL数据库
我正在尝试创建HttpPost方法来创建一个新的数据库条目。它应该从不同的数据库表和“name”中获取2个外来ID。模型如下:C# 使用EF将数据插入SQL数据库,c#,database,entity-framework,asp.net-mvc-4,http-post,C#,Database,Entity Framework,Asp.net Mvc 4,Http Post,我正在尝试创建HttpPost方法来创建一个新的数据库条目。它应该从不同的数据库表和“name”中获取2个外来ID。模型如下: public class Domena { public int DomenaID { get; set; } // this domains ID public int TLDID { get; set; } // foreign id public int KlientID { get; set; } // foreign id
public class Domena
{
public int DomenaID { get; set; } // this domains ID
public int TLDID { get; set; } // foreign id
public int KlientID { get; set; } // foreign id
public string Nazwa { get; set; }
public virtual TLD TLD { get; set; }
public virtual Klient Klient { get; set; }
}
public ActionResult Add_Domain(int id)
{
ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ");
var model = new Domena { KlientID = id };
return View(model);
}
对,基本上这就是我现在拥有的:
// GET: /Domena/Add_Domain
public ActionResult Add_Domain()
{
ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ");
ViewBag.KlientID = new SelectList(db.Klienci, "KlientID", "KlientID");
return View();
}
//
// POST: /Domena/Add_Domain
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Add_Domain(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", "KlientID", domena.KlientID);
return View(domena);
}
它现在的工作方式是,它将显示一个下拉列表,我可以从中通过“Typ”选择TLDID,通过数据库中的“KlientID”条目选择KlientID。它还要求一个“纳兹瓦”,这是一个必须书写的名字
我想删除从dropdownlist中选择KlientID的选项,而是让HttpPost从链接中获取KlientID。例如:
/Klient/details/6
/Domena/Add_Domain/6
<fieldset>
<legend>Domena</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TLDID)
</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)
</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>
多梅纳
@LabelFor(model=>model.TLDID)
@DropDownList(“TLDID”,String.Empty)
@Html.ValidationMessageFor(model=>model.TLDID)
@LabelFor(model=>model.KlientID)
@DropDownList(“KlientID”,String.Empty)
@Html.ValidationMessageFor(model=>model.KlientID)
@LabelFor(model=>model.Nazwa)
@EditorFor(model=>model.Nazwa)
@Html.ValidationMessageFor(model=>model.Nazwa)
提前谢谢 如果使用默认的MVC路由
{controller}/{action}/{id}
您应该能够利用id
参数。客户端页面中的Add_Domain
链接将设置路由值:
@Html.ActionLink("Add a domain", "Add_Domain", "Domena",
new { id = Model.KlientID }, null)
为“获取”操作指定一个参数,并在模型上设置此参数:
public class Domena
{
public int DomenaID { get; set; } // this domains ID
public int TLDID { get; set; } // foreign id
public int KlientID { get; set; } // foreign id
public string Nazwa { get; set; }
public virtual TLD TLD { get; set; }
public virtual Klient Klient { get; set; }
}
public ActionResult Add_Domain(int id)
{
ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ");
var model = new Domena { KlientID = id };
return View(model);
}
在您的视图中,删除KlientID
的标签和验证消息,并用隐藏的输入替换下拉列表:
@Html.HiddenFor(model => model.KlientID)
在POST操作中,仅删除ViewBag.KlientID=…
行。其余的可以保持不变。MVC模型绑定器将隐藏字段绑定到domena.KlientID
属性
id
参数在这里有点误用,因为该id
通常与Domena
控制器处理的模型相关,因此通常是DomenaID
而不是KlientID
。但它应该仍然有效。我会考虑使用查询参数来更清楚地指出路由中的最后一个参数是<代码> KLITEND :
行动联系将是:
@Html.ActionLink("Add a domain", "Add_Domain", "Domena",
new { klientID = Model.KlientID }, null)
获取操作是:
public ActionResult Add_Domain(int klientID)
{
ViewBag.TLDID = new SelectList(db.TLDs, "TLDID", "Typ");
var model = new Domena { KlientID = klientID };
return View(model);
}
事后行动也是如此。创建的链接是
/Domena/Add_Domain?klientID=6
,工作起来很有魅力!我还将“return RedirectToAction(Index)”替换为“return RedirectToAction(“详细信息”,new RouteValueDictionary(new{controller=“Klient”,Id=klientID})”;它工作得非常好,并将我带回客户机详细信息页面。