我看了一眼,我找不到解决方案,因此我发现自己在这里。根据我的阅读,我可以使用RegisterClientScript或RegisterClientScriptBlock在asp.net Web表单中执行此操作。我在任何MVC3文档中都找不到这个。 我在MVC 3视图中有以下功能:
MyTest查看:
<div data-role="content">
<div id="mappingTable"></div>
</div>
</section>
@section Scripts {
<script type="text/javascript">
$("#jqm-home").live('pageinit', function () {
addTableRow(' adding data to table <br/>');
});
//I want to the able to call the function from the controller.
function addTableRow(msg) {
$('#mappingTable').append(msg);
};
</script>
}
在我的控制器中,我有以下内容。
public class MyTestController : Controller
{
#region Class Constractor
public MyTestController()
{
Common.ControllerResourceEvent += new System.EventHandler<ResourceEventArgs>(Common_ResourceEvent);
}
private void Common_ResourceEvent(object sender, ResourceEventArgs e)
{
//I want to call the function addTableRow and pass ResourceEventArgs
}
#endregion Class Constractor
public ActionResult Index()
{
return View();
}
}
答案 0 :(得分:9)
你无法真正从控制器“调用”客户端Javascript。你可以做的,假设你想做一些类似于RegisterClientScript的东西,它将JS代码注入你的页面,可以很容易地完成。您可以创建一个模型(它只不过是一个简单的类),它上面有一个字符串属性。将属性值设置为要注入的客户端JS代码。将模型传递给视图。在您的视图中,引用属性 - 如下所示:
public class SampleModel
{
public string JS { get; set; }
}
public ActionResult Index()
{
var model = new SampleModel();
model.JS = "addTableRow('My Message');";
return View(model);
}
// In the view (at the top - note the cast of "model" and "Model"
@model Namespace.SampleModel
// Then your script
<script type="text/javascript">
@Model.JS
或者,如果您不想创建模型,可以通过ViewBag传递它,ViewBag是一个动态对象:
public ActionResult Index()
{
ViewBag.JS = "addTableRow('My Message');";
return View();
}
// In the view:
<script type="text/javascript">
@ViewBag.JS
答案 1 :(得分:2)
使用JavaScriptModel(http://jsm.codeplex.com),您可以通过以下方式执行此操作:
public ActionResult Index()
{
this.AddJavaScriptFunction("addTableRow", "My Message");
return View();
}
如果使用函数创建js文件并将Tables作为列表添加到js变量会更好。然后,js函数将遍历列表并添加表。
public ActionResult Index()
{
this.AddJavaScriptVariable("TableListInJavaScript", tableList);
this.AddJavaScriptFunction("MyTableReadyFunction");
return View();
}
答案 2 :(得分:0)
我认为你可能会以错误的角度来自这里。您无法直接从控制器上调用页面上的javascript。你只能以相反的方式做事,即从javascript调用控制器方法,使用ajax,有几个jquery ajax函数可以帮助你做到这一点。最有用的是$ .post()
我最常使用的模式如下:
在网页中:
$.post('TestController/TestGetPartialView','{param1:"string to add"}', function (data) {
('#mappingTable').append(data); // this adds the string to the mapping table.
},'html');
控制器中的:
[HttpPost]
public PartialViewResult TestGetPartialView(string param1)
{
return PartialView("TestPartial", param1);
}
部分视图中的:
@model string
<p> Model </p>
这会将页面中的字符串传递回控制器,然后传递到局部视图,然后返回页面。这可能不是您想要做的,但它是如何使用ajax和部分视图传递数据的示例,我认为这可能对您有帮助。