【问题标题】:Setting property on the model object?在模型对象上设置属性?
【发布时间】:2011-03-03 13:13:45
【问题描述】:

嗨,

我正在构建一个 ASP.NET MVC 站点并且遇到了一个问题。在我的项目中,我得到了一个包含几个属性的模型视图类,例如:

public class myModelView
{
  public int MyProperty1(){ get; set;}
  public int MyProperty2(){ get; set;}
  public int MyProperty3(){ get; set;}
}

这个模型视图类绑定到我需要能够设置属性的类型化视图。如何使用 javascript/jquery 执行此操作?我已经尝试过 Model.MyProperty1 = 1,但这不起作用?

致以最诚挚的问候

【问题讨论】:

  • 你需要在视图中使用 JavaScript 编辑 props 还是需要使用 JavaScript 将它们发送到服务器?
  • 我需要设置ModelView的属性,而不是触发提交。

标签: javascript jquery asp.net-mvc


【解决方案1】:

您不能使用 javascript 设置服务器端值。您可以使用 HTML 帮助程序将这些值绑定到输入字段(文本框、隐藏字段、文本区域、下拉菜单等),然后使用 javascript 修改这些输入字段的值。

例如,如果您有一个隐藏字段:

<input type="hidden" name="foo" id="foo" value="bar" />

你可以像这样修改它的值:

$('#foo').val('some new value');

然后,当包含表单提交到服务器时,新值将绑定到您的视图模型。

【讨论】:

  • 我有一个模型,它公开了 MyType 的数组,它有两个属性,NameValue。我希望用户能够向父模型添加和删除名称-值对的行,并且它都会等到整个表单被提交并保存。怎么做??
【解决方案2】:

您正在尝试在客户端上设置服务器端属性 - 它不起作用。 当您的视图被渲染时,您的视图模型仅存在于服务器上。一旦响应发送到浏览器,您的类就不再存在了。

如果您想将一些数据从客户端传递到服务器,您必须:

  • 张贴表格,或
  • 进行 AJAX 调用

看看jQuery ajax方法。

ViewModel 用于将数据从控制器传递到视图,以便视图可以呈现 HTML。在呈现 HTML 后,ViewModel 将被丢弃。在视图中设置 ViewModel 属性是没有意义的,因为以后不会使用它们。

我相信您来自 WebForms (UpdatePanel) 背景。 MVC 是一个完全不同的概念/架构。它的工作方式与 WebForms / UpdatePanel 不同。

【讨论】:

  • 假设我得到了以下 ModelView 类 hierarki MyClass>F>Order,我将 F 属性发送到一个全景视图,从这里我可以设置 $('#F_Order') 并得到这个价值回到服务。我需要在主 aspx 文件中做同样的事情,为此我尝试了“#Model_F_Order”但没有成功?也许我必须将该属性绑定到一个隐藏字段才能使其工作?
  • “将此值返回给服务”中的“服务”是什么?
  • 对不起,ModelView 将设置在服务端,并将其发送到视图。然后视图被发送到客户端,当客户端提交时,defaultbinder 将尝试绑定(在这种情况下)到 ModelView。我需要的是在这个 ModelView 上设置属性,但我认为我需要的只是一个绑定到 ModelView 类上正确属性的隐藏字段。
猜你喜欢
  • 2012-04-13
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2013-11-24
  • 2015-08-14
相关资源
最近更新 更多