我有非常复杂的模型。流程是这样的: - 在控制器中我从数据库中填充模型 - 在视图中我有几个选项卡。在第一个选项卡上填写信息后,第二个选项卡启用(这很好用),然后单击第二个选项卡按钮,我需要更新模型的一些属性。如何在不再次调用数据库以在控制器上填充模型的情况下执行此操作?该模型非常复杂,因此我无法将所有属性存储为“隐藏”。
我希望我设法说得足够清楚。感谢您的任何帮助
我有非常复杂的模型。流程是这样的: - 在控制器中我从数据库中填充模型 - 在视图中我有几个选项卡。在第一个选项卡上填写信息后,第二个选项卡启用(这很好用),然后单击第二个选项卡按钮,我需要更新模型的一些属性。如何在不再次调用数据库以在控制器上填充模型的情况下执行此操作?该模型非常复杂,因此我无法将所有属性存储为“隐藏”。
我希望我设法说得足够清楚。感谢您的任何帮助
使用模仿您的模型的 JSON 对象,并在用户单击不同的选项卡或其他任何内容时对其进行更新。客户端更新/操作完成后,使用 AJAX 将您的 JSON 对象提交给控制器。以下是如何通过单击按钮执行此操作(您可以将其更改为单击的任何内容):
<script src="../../Scripts/json2.js" type="text/javascript"></script>
<input type="button" value="Partially Update my Model" onclick="UpdateYourModel()" />
<input type="button" value="Save to Database" onclick="SaveToDataBase"/>
<script type="text/javascript">
// Create YourModel Json Object including child objects in it.
var childObject={"ChildId": "","ChildDescription":""};
//The array name (childObjects) should match the collection name in your actual Model
var yourModel= { "ModelId": "", "Description": "","childObjects[]":"" };
function UpdateYourModel() {
//update the childObject first
childObject.ChildId=1;//any value from anywhere
childObject.ChildDescription="any value";
// Update the model
yourModel.ModelId= $("#ModelId").val();
yourModel.Description="This property was changed at client side";
yourModel.childObjects.push(childObject);//add child object to yourModel
//Likewise, update other properties of yourModel
}//function ends here
function SaveToDataBase()
{
$.ajax({
url: "URL to your controller",
data: JSON.stringify(yourModel),
type: 'POST',
contentType: 'application/json;',
dataType: 'json',
success: function (result) {
alert("Success");
}
});
}
</script>
我在使用 ASP.NET MVC 时遇到了同样的情况。我使用 ViewBag 以非常神奇的方式发送数据,创建 Javascript 字符串并使用 Html.Raw 运行它们,在许多地方使用 .executeSql,完成了真正的魔法。但毕竟我问自己:值得痛苦吗?
无论您没有足够的时间(我的意思是这个!),我都强烈建议您阅读一些好的文档并尝试一些教程,然后再潜入解决方法的黑暗海洋。
不要忘记,通过良好的设计并很好地使用模型类的功能,您将不需要太多的变通方法,这首先会给您带来快乐。
针对您的情况;最好的地方是创建一个 Helper 类,例如:
public abstract class Helper<T> : WebViewPage<T>
{
private dbContext db = new dbContext();
public virtual whatEver yourUpdateOperation(int? id, string data)
{
// you can do your update operations here
return whatEver;
}
}
要将此类应用于所有网页,请更改 Views 目录中 web.config 文件中的行:
<pages pageBaseType="YourProject.HelperDirectory.Helper">
从现在开始,您可以从您的视图中调用 yourUpdateOperation,例如:
@foreach (var item in Model)
{
<tr>
<td>
<!-- View or operate things-->
</td>
@yourUpdateOperation(item.ID, data)
</tr>
}
希望这可以帮助。