我对asp.mvc 3非常陌生。我使用kendoui和knockout进行绑定。我的应用程序看起来是这样的例子:ASP MVC 3使用参数创建局部视图或自定义帮助器
视图模型Home控制器的
public class MyViewModel
{
public MyViewModel()
{
Initialize();
}
public IEnumerable<string> MyOptions1 { get; set; }
public string MyChoice1 { get; set; }
public IEnumerable<string> MyOptions2 { get; set; }
public string MyChoice2 { get; set; }
private void Initialize()
{
MyOptions1 = new List<string>()
{
"OptionA",
"OptionB"
};
MyOptions2 = new List<string>()
{
"OptionC",
"OptionD"
};
}
}
指数方法
public ActionResult Index()
{
return View();
}
索引视图:
<div id="optionsArea">
<table>
<tr>
<td><label>Option1:</label></td>
<td><input id="options1" data-bind="kendoDropDownList: { data: MyOptions1, value: MyChoice1 }" /></td>
</tr>
<tr>
<td><label>Option2:</label></td>
<td><input id="options2" data-bind="kendoDropDownList: { data: MyOptions2, value: MyChoice2 }" /></td>
</tr>
</table>
</div>
当索引视图加载我打电话OptionsData
控制器的方法返回填充的MyViewModel
作为Json。
public ActionResult OptionsData()
{
var myModel = new MyViewModel();
var jsonNetResult = new JsonNetResult
{
Formatting = Formatting.Indented,
Data = myModel
};
return jsonNetResult;
}
在javascript中MyViewModel
创建填充的javascript视图模型viewModel
与淘汰赛观察到的性能,它可以绑定到索引视图股利。
$(function() {
my = {
}
$.getJSON("/Home/OptionsData", function (data) {
// create observable properties from MyViewModel
my.viewModel = ko.mapping.fromJS(data);
ko.applyBindings(my.viewModel, document.getElementById("optionsArea"));
});
});
在我的应用我有一个包含标签和下拉许多元素,所以我想提取像一个组件,部件和重用的一些参数调用它来代替绑定。我读过一些文章,也许该解决方案是使用局部视图或自定义HTML佣工,所以我可以做这样的事情:
_OptionPartialView
<tr>
<td><label>Option2:</label></td>
<td><input data-bind="kendoDropDownList: { data: (parameter1), value: (parameter2) }" /></td>
</tr>
在那里不知何故,我想替换参数1和参数2当我打电话部分在索引视图:
@Html.Partial("_OptionPartialView.cshtml", parameter1, parameter2);
或helper方法:
@Html.MyCustomHelper(..., parameter1, parameter2);
然后,我会极力我的索引方法绑定到索引视图:
public ActionResult Index()
{
var myModel = new MyViewModel();
return View(myModel);
}
而且我认为会是这个样子:
@model MVC3Question.Models.MyViewModel
<div id="optionsArea">
<table>
@Html.Partial("_OptionPartialView.cshtml", Model.MyOptions1, Model.MyChoice1);
@Html.Partial("_OptionPartialView.cshtml", Model.MyOptions2, Model.MyChoice2);
</table>
</div>
我的问题是,这是在这种情况下,部分景观较好或自定义帮助器方法,更重要的是如何使用参数记住发布的示例代码来实现它们。欢迎任何其他方式或想法。谢谢!
谢谢你的回答。对于具有局部视图的第二种方法,在我的真实应用程序中,MyViewModel对象包含大量数据和逻辑,并且不能返回强类型化视图的视图模型列表。也许,为每个组件创建单独的迷你视图模型并将其绑定到局部视图(如您示例中的视图模型)。另外还有一个选项可以从另一个文件中的html帮助器方法中提取html代码,并从那里获取它喜欢这个。我不太喜欢用c#代码搞乱模板代码的想法。 – Mdb
我不知道从html助手中提取html的方法。其实不建议使用这种助手,因为它们是反模式,很难自定义后缀。 对于模型,您可以创建包含MyOptions和MyChoise的另一个模型,并在较大模型中将其用作List。 –