0

我需要将一个控制器操作中的变量传递给另一个视图中的 javascript..

在控制器动作 A 中:

        [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection args)
    {
        var obj = new ProjectManagernew();

        var res = new ProjectViewModelNew();
        try
        {
            UpdateModel(res);
            if (obj.AddUpdateOrderField(res))
            {
                ViewBag.RecordAdded = true;
                ViewBag.Message = "Project Added Successfully";
                TempData["Name"] = "Monjurul Habib";
            }
            return View(res);
        }
        catch (Exception)
        {
            //ModelState.AddRuleViolations(res.GetRuleViolations());
            return View(res);
        }
    }

在另一个 javascript 中:

function gridA() {
   var message = '@TempData["Name"]';
   $('#mylabel').text(message);
}

只有 Tempdata 有效但不是第一次从我调用动作控制器后的第二次开始

  1. 我想临时数据第一次工作
  2. 我想在使用后清除数据
4

1 回答 1

1

如果您的 javascript 位于采用 ProjectViewModelNew 的同一视图中,您可以为您的视图使用不同的类型,例如您可以使用组合:

public class MyCompositeClass
{
  ProjectViewModelNew ProjectViewModel{get;set;};
  string Name{get;set;}
}

然后您的操作方法将是:

    [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection args)
{
    var obj = new ProjectManagernew();

    var res = new ProjectViewModelNew();

    var myView = new MyCompositeClass();
    try
    {
        UpdateModel(res);
        myView.ProjecViewModel = res;
        if (obj.AddUpdateOrderField(res))
        {
            ViewBag.RecordAdded = true;
            ViewBag.Message = "Project Added Successfully";
            myView.Name= "Monjurul Habib";
        }
        return View(myView);
    }
    catch (Exception)
    {
        //ModelState.AddRuleViolations(res.GetRuleViolations());
        return View(myView);
    }
}

你的 js 将是:

function gridA() {
   var message = '@Model.Name';
   $('#mylabel').text(message);
}
于 2013-04-13T17:53:45.423 回答