2017-04-13 49 views
0

我想从视图传递数据到控制器,但它总是返回0,我不知道为什么。 我必须验证入侵代码是否与在ActionResult Sortie()的参数中传递的代码相同,但我无法获取在视图中进入的值。从视图传递数据到控制器在asp.net中失败mvc

查看:

@model ViewModel.DemandeViewModel 

@{ 
    ViewBag.Title = "Sortie"; 
} 
<div class="col-xs-12"> 
<div class="box"> 
    <h2>Sortie Gabarit</h2> 


    @using (Html.BeginForm("Sortie", "Demandes", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
    <div class="form-horizontal"> 

     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 

     @Html.HiddenFor(model => model.CodeBarre) 

     @ViewBag.error 
     @Html.ValidationMessage("error_msg") 
     <div class="form-group"> 
      @Html.LabelFor(model => model.CodeBarre, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.CodeBarre, new { htmlAttributes = new { @class = "form-control", @name = "codeB" } }) 
       @Html.ValidationMessageFor(model => model.CodeBarre, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Sortie" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 


    } 
</div> 
</div> 

控制器:

//Get Sortie 
    public ActionResult Sortie(Int64 id) 
    { 
     TempData["codebarre"] = id; 

     return View(); 

    } 
    //Post Sortie 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Sortie() 
    { 

     var mvtrepository = new MvtRepository(db); 
     var c = Request.Form["codeB"]; 

     if (Convert.ToInt64(TempData["codebarre"]) == Convert.ToInt64(c)) 
     { 
      var mvtInsert = mvtrepository.InsertMvt(DateTime.Now, Convert.ToInt64(TempData["codebarre"]), 2); 
      return RedirectToAction("Traitement"); 
     } 


     else 
     { 
      return View("Error"); 
     } 

    } 

帮助请和谢谢。

回答

0

请勿直接访问Request.Form。相反,你的POST动作应该接受ViewModel作为参数。

[HttpPost] 
public ActionResult Sortie(ViewModel.DemandeViewModel postData) { 
    int c = postData.CodeBarre; // assuming CodeBarre is an int in the ViewModel 
    if ((int)TempData["codebarre"] == c) { 
     // ... 
    } 
    // ... 
} 
在您查看

而且,让MVC设置name属性,使视图模型可以通过ModelBinder的正确绑定。

@Html.EditorFor(model => model.CodeBarre, new { htmlAttributes = new { @class = "form-control" } }) 

因为CodeBarre有一个编辑器输入,所以不需要另一个隐藏输入。删除行

@Html.HiddenFor(model => model.CodeBarre) 
+0

非常感谢你much..It现在的作品:) – oumaima

+0

很高兴我能帮助你:) –

相关问题