Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EF将数据插入SQL数据库_C#_Database_Entity Framework_Asp.net Mvc 4_Http Post - Fatal编程技术网

C# 使用EF将数据插入SQL数据库

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

我正在尝试创建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 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
  • 我点击Add_Domain链接,该链接获取当前查看的KlientID,并将我带到:
    /Domena/Add_Domain/6
  • 所以,我的问题是,我如何修改Get和Post方法,以便在数据库中创建一个新的“domena”条目,该条目指向链接中的客户机id

    我也要改变什么吗

    以下是我当前的“添加域视图”字段集:

    <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})”;它工作得非常好,并将我带回客户机详细信息页面。