【问题标题】:Pass data from view to controller in asp.net mvc4 razor在asp.net mvc4 razor中将数据从视图传递到控制器
【发布时间】:2014-01-03 14:42:38
【问题描述】:

我的情况是,我有两个不同的视图和一个通用控制器(及其方法)。一个是创建项目视图,另一个是编辑项目视图。我的控制器有一种称为 details 的方法。现在我想通知控制器我即将创建或编辑。在此基础上,我的整个代码将执行。

csHTML

<a href="..\example\details" id="iCreate">Create</a>
<script>
$( document ).ready(function() {
 $('#iCreate').click(function(){ 
    @Session["createMode"] = true; // Not working...
    @ViewBag["createMode"] = true; // Not working...
 });
});
</script>

控制器

public ActionResult details()
{
    // How to get data here??? 
     if(createMode){
      }
      else{
      }
}

实现这一点的一种方法是在querystring 中传递参数,但我不想这样做。 那么还有其他方法可以将数据从 View 传递到 Controller 吗?

提前谢谢...

【问题讨论】:

    标签: c# javascript jquery asp.net-mvc-4 razor


    【解决方案1】:

    关于

    @Session["createMode"] = true; // Not working...
    @ViewBag["createMode"] = true; // Not working...
    

    这是行不通的,因为 @Session 和 @ViewBag 是服务器端变量,显然无法通过 JavaScript(客户端)进行更改。

    你可以使用

    1. 查询字符串(你提到的)
    2. 发布表单数据
    3. 使用 Ajax 请求并编写一个控制器操作来检索您的请求

    实现你想要的

    【讨论】:

    • 很好的解释。我会寻找另一种方法来实现这一点。
    【解决方案2】:

    做这样的事情

    在 HTML 中

    <input type="hidden" id="createMode" value="False" />
    

    javascript:

    $( document ).ready(function() {
     $('#iCreate').click(function(){ 
        $('#createMode').val('True');
     });
    });
    

    控制器:

    public void details(bool createMode)
    {
        //createMode will automatically be passed
         if(createMode){
          }
          else{
          }
    }
    

    【讨论】:

    • 感谢您的回复,但您能否进一步说明bool createMode 的值将如何通过点击链接传递?您刚刚更改了隐藏输入类型的值。
    • 每个输入都会传递给控制器​​,“True”的值就是这个值,c#很容易在控制器上将字符串“True”转换成bool,它的工作方式就像你想要的
    【解决方案3】:

    一个简单的方法是使用 Ajax

    $( document ).ready(function() {
     $('#iCreate').click(function(){ 
        $.ajax({
          url: '@Url.Action("details")' + '?mode=create'
        }).done(function(){
          //do something
        });
     });
    
    public void details(string mode)
    {
         if(mode.Equals("create")){
          }
          else{
          }
    }
    

    【讨论】:

    • 感谢您的帮助,但我有一个问题,在控制器端我使用的是 ActionResult 方法而不是 void。很抱歉,我很抱歉。
    • 无论方法是 void 还是 action 方法,它的工作方式都应该相同。我实际上犯了一个小错误。 Url.Action 仅在方法是 ActionResult 时才有效。所以上面的代码应该可以通过将 void 更改为 ActionResult 来正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多