ASP.NET MVC - Существует ли способ моделировать ViewState?

Вы не должны вызывать setState внутри метода render, у вас может получиться бесконечный цикл. Вызов myFunc должен быть где-то еще (в зависимости от вашей бизнес-логики). Когда функция завершается, она обновляет состояние и затем запускает повторную визуализацию, поэтому MyComponent получит самое последнее значение.

ОБНОВЛЕНИЕ

Я не знаю, какие условия потребуют повторного вызова myFunc, но вы можете сделать:

state = {
  myProp: null // or some other value that MyComponent can handle as a null state
}

componentDidMount () {
  myFunc((p) => {
    if(!_.isEqual(p, this.state.myProp)) // This is needed only if you get null back from the callback and you don't want to perform an unnecesary state update
      this.setState({myProp: p})
  }
}

render(){
  const { myProp } = this.state
  // You can also do if (!myProp) return null  
  return <MyComponent myProp={myProp}/> 
}
9
задан Mehrdad Afshari 8 June 2009 в 13:36
поделиться

4 ответа

Скрытые поля ввода не помогут?

<%= Html.Hidden(...) %>

Обновление (сериализирующий объект к base64):

var formatter = new BinaryFormatter();
var stream = new MemoryStream();
formatter.Serialize(stream, myObject); // myObject should be serializable.
string result = Convert.ToBase64String(stream.ToArray());

Когда Вы хотите выбрать его назад:

var formatter = new BinaryFormatter();
var stream = new MemoryStream(Convert.FromBase64String(hiddenFieldValue));
var myObject = (MyObjectType)formatter.Deserialize(stream);

Удостоверьтесь, что Вы проверяете данные, хранившие в поле при использовании их, поскольку клиент мог бы изменить их. ViewState заботится об этом автоматически.

Примечание стороны: использование ASP.NET LosFormatter вместо BinaryFormatter сериализировать ViewState поскольку это - более эффективная или основанная на ASCII сериализация. Вы могли бы хотеть рассмотреть это также.

20
ответ дан 4 December 2019 в 09:14
поделиться

Вы могли сохранить массив JavaScript на клиенте... и затем передать всю информацию, когда пользователь в конечном счете сохраняет.

Необходимо работать немного больше, но в конце это окупается.

Я в большой степени использую jQuery, чтобы сделать материал как этот, это легче, чем это кажется.

0
ответ дан 4 December 2019 в 09:14
поделиться

TempData["MyData"], обратите внимание, это только продлится одно распространение в прямом и обратном направлениях.

3
ответ дан 4 December 2019 в 09:14
поделиться

Если бы Вы просто хотите сохранить данные для того запроса и следующего запроса, я рекомендовал бы использовать Tempdata, еще я рекомендую использовать ответ Mehrdad.

0
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: