在控制器操作中渲染 HTML
我无法决定是否可以在控制器操作中构造 HTML 并从我的视图(使用 jquery)将此 HTML 提供回 AJAX 调用。
例如,当通过 jQuery Autocomplete 选择客户端时,除了获取所选客户端 ID 之外,我们还需要为其构建一个显示或编辑表单。 我们可能:
- 拥有数十个具有正确 ID 的占位符
div
,并从控制器操作接收Client
JSON 对象,然后使用我们对象中的内容更新这些 div(非常错误)容易发生,我们的 JS 代码中存在大量 IF 等), - 或者不请求
Client
JSON 对象,而是请求准备好的 HTML 并将其插入到视图中(更吸引人的解决方案,逻辑被移动到控制器中并且易于维护 - 我宁愿维护 C# 代码而不是 JS)。
您认为这些是有效的选择吗?大多数现代应用程序有什么作用?
- 2. 虽然可以完美地用于客户的显示表单,但它是否可以用于编辑? Eedit 表单应该包含 HTML
input
控件,因为我希望将客户端属性回发,因为当它们回发到控制器时,我可以用它们具体化视图模型。
I am having trouble deciding whether it is ok to construct HTML in controller actions and provide this HTML back to AJAX calls from my view (using jquery).
For instance, when selecting a client via jQuery Autocomplete, besides just getting the selected client ID we also need to construct a display or edit form for it.
We might:
- Have like dozens of placeholder
div
s with proper IDs and receiveClient
JSON object from out controller action and then update those divs with the content from our object (very error prone, lots of IFs in our JS code, etc.), - or instead of requesting for a
Client
JSON object rather request the prepared HTML and just insert it into the view (more appealing solution, logic is moved into controller and easiear to maintain - I rather maintain C# code than JS).
Do you think these are valid options? What do most modern apps do?
- While 2. will work perfectly for client's display form will it work for edit for?. Eedit form should contain HTML
input
controls because I want client properties to be POSTed back because when they are posted back to the controller I can materialize a viewmodel with them.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
控制器几乎从来没有打算这样做。
解决方案是:
我个人会选择3然后2。
Controller is almost never meant to do that.
Solutions are:
I would personally choose 3 and then 2.
您的控制器应该传递数据到您的视图,而不是html。
我个人会使用 PartialViews 和 jQuery Load() 功能 根据提供的数据加载这些部分视图。
Your controller should pass data to your view, not html.
I personally would make use of PartialViews, and jQuery Load() functionality to load those partial views based on the data supplied.
您不能仅使用 Ajax 表单来实现此目的吗?
即
1:通过jquery提交表单。
2:根据您作为参数传递的内容查找并返回部分视图。
3:更新相关div。
Can you not just use an Ajax form for this?
i.e
1: submit the form via jquery.
2: find and return a partial view based on whatever you're passing in as a parameter.
3: update the relevant div.