将数据从视图传递到asp.net mvc4 razor中的控制器

时间:2014-01-03 14:42:38

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

我的情况就像,我有两个不同的视图和一个共同的控制器(及其方法)。一个是创建项目视图,另一个是编辑项目视图。我的控制器有一个叫做细节的方法。现在我想通知控制器我正在创建或编辑表单。在此基础上,我的整个代码将执行。

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吗?

提前致谢...

3 个答案:

答案 0 :(得分:1)

关于

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

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

您可以使用

  1. 查询字符串(您提到过)
  2. 发布表单数据
  3. 使用Ajax请求并编写检索请求的控制器操作
  4. 实现你想要的目标

答案 1 :(得分:0)

做这样的事情

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{
      }
}

答案 2 :(得分:0)

一种简单的方法是使用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{
      }
}