Я предполагаю, что у вас должны быть свойства в вашей модели, чтобы в представлении вы могли использовать их для отображения полезной информации, например, ActionLink с идентификатором или некоторым текстом только для чтения.
В этом случае вы можете определить вашу модель с явной привязкой:
[Bind(Include = "Name")]
public class Student
{
int Id { get; set; }
int Name { get; set; }
DateTime Birthday { get; set; }
}
Таким образом, при обновлении модели, если пользователь отправляет дополнительный идентификатор, он не будет привязан.
Еще одна идея, которая мне нравится, заключается в том, чтобы ваша модель знала свои привязки для каждого сценария и проверяла их компилятором:
public class ModelExpression<T>
{
public string GetExpressionText<TResult>(Expression<Func<T, TResult>> expression)
{
return ExpressionHelper.GetExpressionText(expression);
}
}
public class Student
{
public static string[] EditBinding = GetEditBinding().ToArray();
int Id { get; set; }
int Name { get; set; }
DateTime Birthday { get; set; }
static IEnumerable<string> GetEditBinding()
{
ModelExpression<Student> modelExpression = new ModelExpression<Student>();
yield return modelExpression.GetExpressionText(s => s.Name);
}
}
Таким образом, в вашем действии при вызове TryUpdateModel вы можете передать эту информацию.