我试图了解绑定如何与MVC一起使用。
说我有这个模特。
public class MyObjectModel
{
public int MyID { get; set; }
public string Name { get; set; }
public string Add1 { get; set; }
public string City { get; set; }
}
在我的情况下,我有一个只返回View()的控制器。 (没有型号)。
但是在我看来,我有一个网格,它会回调控制器并返回一个列表。 List<MyObjectModel> listObject
现在在这个网格中,每一行都是一个MyObjectModel。因此,用户可以创建或修改MyObjectModel对象。
当用户点击保存时,会有一个post方法。
[AcceptVerbs(HttpVerbs.Post)]
public void CreateMyObject([DataSourceRequest] DataSourceRequest dsRequest, MyObjectModel obj)
{
if (ModelState.IsValid)
{
// Go update the database
}
}
绑定如何从最初将数据发送到视图以及从视图发送回控制器?
我可以在将MyObjectModel发回控制器之前手动操作(通过Jquery)吗?
显然我遇到了将数据传回控制器的问题,但是如果能够更好地理解一般的绑定工作,我希望能够学习并解决我的问题。
答案 0 :(得分:1)
MyObjectModel
仅存在于服务器上。
您可以使用其属性来帮助通过视图(blahblah.cshtml
)生成HTML文本。视图通常会有一个表单,并且(通过HtmlHelper
内容的怪异,不人道的魔力)表单字段将根据MyObjectModel
中的属性赋予其属性值。然后,服务器通过电线将该HTML作为文本(一系列零和一系列)发送到客户端浏览器。
在客户端上,浏览器会呈现您发送的HTML页面。在该页面中,可能存在JavaScript,它可以操纵页面中的表单字段,但它不能触及Internet另一侧的不同计算机中存在的任何C#代码。
当用户提交表单时,浏览器将表单字段值以文本形式(另一长串零和一个)发布回服务器,从而创建一个全新的MyObjectModel
实例和使用来自客户端的表单字段值初始化它,并将其交给Controller方法。
根据我过去对“视图模型”一词的曝光,它不适合与MVC一起使用(注意:Some people use the term with MVC。这对我来说是新的,但我想我可能希望他们我选择了一个不同的术语来指代他们所谈论的概念。术语“视图模型”通常用在像WPF这样的环境中,其中UI和模型存在于同一个内存空间中,因此您可以拥有一个与两者交互的实时.NET类实例。你不能在像你的模型存在于服务器上的MVC这样的Web应用程序中这样做。在MVC中,如果您希望某些内容与视图模型类似,则必须使用JavaScript编写并在客户端上运行。
在网络编程中,始终要了解服务器上的哪些代码以及客户端上的代码。我发现,用C#编写服务器代码和用JavaScript编写客户端代码对这方面有很大帮助。我做了一些经典的ASP,当两端都是用JavaScript编写时,它很容易迷失方向。
您当然可以在客户端上使用视图模型编写完整的AJAX Web应用程序,并让它将服务器用作通过Web服务与之通信的数据存储。但这不是你在问题中包含的MVC代码中所做的。