2015-12-15 184 views
0

我需要在我的控制器的方法中使用当前视图的名称 我能够在我的视图中使用下面的代码获取名称。将数据从视图传递到控制器方法

我希望将此@ViewData [“pageName”]传递给我的控制器中的MakeChange动作结果 。每次我通过MakeChange方法时,我得到的所有 是“对象引用未设置为对象的实例”

如何将数据从我的视图传递到控制器方法?

  @ViewData["pageName"] = @Path.GetFileName(Server.MapPath(VirtualPath)) 


      public ActionResult MakeChange(string lang) 
        { 
         string getPageName = ViewData["pageName"].ToString(); 

         return RedirectToAction(getPageName, "Home"); 
        } 

回答

0

您无法使用ViewData将数据从视图传递到控制器。您可以使用ViewData将数据从Controller传递到您的视图。

达到你想要什么,你可以做如下:

<input type='hidden' name='lang' value='@Path.GetFileName(Server.MapPath(VirtualPath))' /> 

<input type='submit' value='send'> 

PS:你应该把输入的表单标签内。

+0

谢谢。那么如何从控制器方法中检索这个?这是否像一个请求? – user2320476

+0

模型绑定会将隐藏字段的值(使用name属性)传递给您在MakeChange动作 –

+0

中预期的变量,其中包含一些其他示例:http://stackoverflow.com/a/20333225和http:// www.codeproject.com/Articles/576514/AplusBeginner-splusTutorialplusonplusVariousplus –

0

Path.GetFileName(Server.MapPath(VirtualPath))会给你带有扩展名的剃须刀视图名称(例如:index.cshtml)。由于RedirectToAction方法正在查找操作方法名称,因此无法将其与RedirectToAction方法一起使用。在使用文件扩展名部分之前,您需要修剪它。

要将此信息发送给控制器操作,您可以将值保存在表单内的隐藏字段内。当用户发布表单时,它将在您的HttpPost操作方法中可用。您需要确保有一个参数与隐藏字段的名称值具有相同的名称。

@using (Html.BeginForm()) 
{ 
    <input type="text" name="lang" value="English" /> 
    <input type="hidden" name="pageName" 
           value="@Path.GetFileName(Server.MapPath(VirtualPath))" /> 

    <input id="BtnAdd" type="submit" value="Save" /> 

} 

所以,你的操作方法将

public ActionResult MakeChange(string lang,string pageName) 
{ 
    var viewName=pageName; 
    //Get rid of the extension. 
    viewName = viewName.Replace(".cshtml",""); 
    return RedirectToAction(viewName , "Home"); 
} 

即使你正在做一个ajax后,它仍然可以工作,只是系列化你的表格并发送

$("#BtnAdd").click(function(e){ 
    e.preventDefault(); 
    var _this = $(this); 
    $.post("@Url.Action("MakeChange","Home")",_this.closest("form").serialize(), 
                     function(response){ 

     //do something with response 
    }); 
}); 

有更干净的方式获得视图名称没有我们做的文件扩展名修剪方法。看看this answer

相关问题