2017-09-14 159 views
0

我有一个FormMethod后一个问题,我想发布一个单一值(ID),并将其存储在一个会话变量,但价值回归0FormMethod.Post返回0

这是我的码。

@foreach (var item in Model) 
       { 
        using (@Html.BeginForm("Index", "ProductSelec", FormMethod.Post)) 
        { 

         @Html.HiddenFor(modelItem => item.id, new { value = "@Html.DisplayFor(modelItem => item.id)" }) 

         <div class="AppOpt"> 
          <button type="submit" name="submit" style="background-image: url('../Content/ICONS/SystemApp/@Html.DisplayFor(modelItem => item.img)');border-radius: 20px;background-size: cover;background-repeat: no-repeat;" class="AppImg"> 
           <div class="OptNameRec"> 
            <div class="OptIcon"> 
             <img src='~/Content/ICONS/@Html.DisplayFor(modelItem => item.icon)'> 
            </div> 
            <div> 
             <p>@Html.DisplayFor(modelItem => item.nombre)</p> 
            </div> 
            <div class="clear"></div> 
           </div> 
           <div class="OptImage"></div> 
          </button> 
         </div> 
        } 
       } 

表格在foreach里面,因为我从数据库中创建元素dinamically。

我想存储item.id点击。

这是我的控制器

 public ActionResult Index() 
    { 
     return View(db.aplicaciones.ToList()); 
    } 

    public ActionResult ProductFamily() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public int Index(aplicaciones aplicaciones) 
    { 
     Session["appID"] = aplicaciones.id; 

     return aplicaciones.id; 

    } 

,这是我的模型。

public partial class aplicaciones 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public aplicaciones() 
    { 
     this.appNfam = new HashSet<appNfam>(); 
    } 

    public int id { get; set; } 
    public string nombre { get; set; } 
    public string icon { get; set; } 
    public string img { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<appNfam> appNfam { get; set; } 
} 

我试图创建另一个模型,但是当我添加时,foreach没有读取数据库中的值。

我希望你能帮助我。

+0

为什么在foreach之前有一个“@”? –

回答

1

更改您的控制器方法:

[HttpPost] 
public int Index(int id) 
{ 
    Session["appID"] = id; 

    return id; 
} 

更改Html.BeginForm是:

@using (Html.BeginForm("Index", "ProductSelec", new { id = item.id },FormMethod.Post, new { }) 

你也应该能够删除隐藏字段,因为该ID将自行发布从你的表单行为。

+1

这正是我想要的,但我有另一个问题,当我更改我的Html.BeginForm时,在我的视图中发生了一些奇怪的事情,加载按钮后,代码添加了这个。 System.Web.Mvc.Html.MvcForm System.Web.Mvc.Html.MvcForm。 忘记吧,我解决了,谢谢你的回答。 –

+1

删除Html.BeginForm之前的@。它应该阅读@using(Html.BeginForm .....,不使用(@ Html.BeginForm .....更新了原始答案。 – Ratatoskr