我有非常复杂的模型。流程是这样的: - 在控制器中,我从数据库中填充模型 - 在视图中我有几个标签。在第一个选项卡上填写信息后,第二个选项卡启用(这很好),然后单击第二个选项卡按钮,我需要更新模型的某些属性。如何在不再调用数据库的情况下执行此操作以便在控制器上填充模型?该模型非常复杂,因此我无法将所有属性存储为“隐藏”。
我希望我能够足够清楚。 感谢您提供任何帮助
答案 0 :(得分:0)
我在ASP.NET MVC中遇到了同样的情况。我使用ViewBag以非常神奇的方式发送数据,创建Javascript字符串并使用Html.Raw运行它们,在很多地方使用.executeSql,做了真正的魔术。但毕竟我问自己:这值得痛苦吗?
无论你没有足够的时间(我的意思是这个!),我强烈建议您阅读一些好的文档并尝试一些教程,然后再潜入黑暗的解决方案。
不要忘记,有了良好的设计并且很好地使用了Model类的功能,你不需要太多的解决方法,这将最重要的是让你获得快乐。
适合您的情况;最好的地方是创建一个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;
}
}
要将此类应用于所有WebPages,请更改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>
}
希望这有帮助。
答案 1 :(得分:0)
使用模仿模型的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>