1

C# と SQL Server 2005 を使用して ASP .Net MVC 3 アプリケーションを開発しています。

Entity Framework と Code First Method も使用しています。

拠点のテーブル 'Gamme' にレコードを追加したいと考えています。

問題は、テーブルに入力するために使用されるパラメータが異なるビューから取得されることです。

これはモデルGammeです:

namespace MvcApplication2.Models
{
    public class Gamme
    {
        [Key]
        [Column(Order = 0)]
        [ForeignKey("Profile_Ga")]
        public string ID_Gamme { get; set; }
        [Key]
        [Column(Order = 1)]
        [ForeignKey("Poste")]
        public string ID_Poste { get; set; }
        public int Position { get; set; }
        public int Nbr_Passage { get; set; }
        public string Last_Posts { get; set; }
        public string Next_Posts { get; set; }

        public virtual Poste Poste { get; set; }
        public virtual Profile_Ga Profile_Ga { get; set; }

    }

ID_Gammeは、コードが次のビューインデックスから取得されます。

<div><%:Html.Label("Gamme :")%><%: Html.DropDownList("SelectedProfile_Ga", new SelectList(Model.Profile_GaItems, "ID_Gamme", "ID_Gamme"))%> <input type="button" value="Configurer" id="btnShowGestion" /></div> 

他のパラメーターは、部分ビューGestion.ascxから取得されます。

 <div><%:Html.Label("Poste :")%><%: Html.DropDownList("SelectedPoste", Model.PostesItems)%><input type="checkbox" name="option1" value="Poste Initial" id= "chkMain" onclick="test();"/>Poste Initial<input type="checkbox" name="option2" value="Poste Final" id= "chkFirst" onclick="test2();"/>Poste Final</div>


         <div><%:Html.Label("Nombre de Passage :")%><%: Html.EditorFor(x=>x.YourGammeModel.Nbr_Passage)%></div>
        <div><%:Html.Label("Position :")%><%: Html.EditorFor(x=>x.YourGammeModel.Position)%></div>
        <div><%:Html.Label("Poste Précédent :")%><%: Html.DropDownList("SelectedPoste", Model.PostesItems)%></div>
        <div><%:Html.Label("Poste Suivant :")%><%: Html.DropDownList("SelectedPoste", Model.PostesItems)%></div>
        <div><input type="button" value="Enregistrer" id="btnSave"  /></div>

コントローラーで関数を作成しようとしましたCreateが、正しい結果が得られません:

public ActionResult Gestion(FlowViewModel model)
{

     model.YourGammeModel = new Gamme();
     return PartialView(model);
}

[HttpPost]
public ActionResult Create(Gamme gamme)
{
    if (ModelState.IsValid)
    {

        db.Gammes.Add(gamme);
        db.SaveChanges();
        return RedirectToAction("Gestion");  
    }

    return View(gamme);
}
4

1 に答える 1

2

正確なコードを見ないと、部分的なページなどをどのようにロードしているかを知るのは困難です。ボタンに関連付けられたアクションがないため、ボタンは何もしません。サブミットに変更すると、メイン ビューと同じコントローラーが起動しますHttpPost

HttpPostそこに続いて、アクションの名前が正しくないか、正しいパラメーターを受け入れていないことが問題だと思います。あなたの例では、同じアクション名と ViewModel を使用する必要があるHttpGetためHttpPost、おそらく次のようなものが必要です。

メインビューの名前が Index.aspx であるとします。

[HttpGet]
public ActionResult Index(FlowViewModel model)
{
    // ...
}

[HttpPost]
public ActionResult Index(FlowViewModel model)
{
    if (ModelState.IsValid)
    {    
        db.Gammes.Add(model.YourGammeModel);
        db.SaveChanges();

        // ...
    }

    // ...
}

次に、 PartialView ( Gestion.ascx ) で、ボタンを次のように変更する必要があります。<input type="submit" value="Enregistrer" />

最後に、送信ボタンをメイン ビュー以外の場所に配置する場合は、Html.BeginFormコードを変更する必要があります。したがって、ExampleSaveコントローラーにAnouarControllerという名前のアクションがあるとしましょう。次のようにします。

<% using (Html.BeginForm("ExampleSave", "Anouar"))
于 2013-05-16T09:29:35.163 に答える