1

所以在我看来,我只想能够读取模型提供的值。

@{
    var bgPath = "../Files/somedir/" + Model.FilePath;
}

所以我可以将它转储到一个字符串中以将图像渲染到 DOM:

 <img id="bg-image" class="background-image" src="@bgPath" draggable ="false" alt="" />

现在,这工作得很好。我的视图正确呈现。我的问题是,提交表单时,会抛出Model.FilePath 为空的错误。

代码已经在视图中的主要(也是唯一的)表单字段之外。

我不想绑定这些数据,我只是用它来给 js 赋值。我还有许多其他领域似乎可以工作,并且没有真正的选择来改变它而无需大量重写。

所以我的问题是,如何获得只读模型值?

4

1 回答 1

3

您需要将其保存在表单的隐藏字段中,以便 MVC 模型绑定在提交表单时使其可用。

@using(Html.Beginform())
{
   @Html.HiddenFor(x=>x.FilePath)
   //other elements also 
   <input type="submite" />
}

但请记住,隐藏值字段可以在发布之前使用浏览器扩展(如萤火虫)进行更改。因此,如果您没有通过从用户读取新值来更新文件路径,请执行以下任一操作

1) 仅更新相关字段。有一个 Update 方法,它只更新模型的相关字段。

 public bool UpdateCustomer(string name,string description,int id);

2)如果更新所有字段,首先从域对象中读取并更新

[HttpPost]
public ActionResult Edit(YourViewModel model)
{
  var domainObject=repo.GetCustomerFromID (model.ID)
  //update only the relevant fields on loaded domain object
  domainObject.Description=model.Description;
  repo.SaveCustomer(domainObject);
  return RedirectToAction("Success");
}
于 2013-02-04T03:06:15.957 回答